A packaged framework for implementing web and API test suites. Builds on Concordion to bring your software delivery team together around living documentation.
My Fixture file is a mix of action needed browser interaction and api services. My idea of writing this file along with markdown file is
setUpData: calling createUser service, and use this user across to the spec and NO need to invoke the browser instance <<< in my view, it should relate to Scope.SPECIFICATION. In markdown file, it places on section called Background
The methods in the fixture file maps correspondingly to the sections in markdown file (scenarios).
But when calling the fixture file, the background section triggers browser as well, and causes error. So I would like to ask/clarify is there any existing feature to invoke the browser manually ? , or, any ways to handle SPEC_SCOPE without invoking browser instance while using CubanoTemplateFixture ?
package com.rwa.specs.bankaccount.feature;
import com.rwa.pages.HomePage;
import com.rwa.services.BankAccountService;
import com.rwa.workflow.WorkFlow;
import org.concordion.api.*;
import org.concordion.cubano.driver.http.HttpEasyReader;
import org.concordion.cubano.template.framework.CubanoTemplateFixture;
import java.io.IOException;
@FullOGNL
public class OnBoardingFixture extends CubanoTemplateFixture {
private WorkFlow workFlow;
private HomePage homePage;
@ConcordionScoped(Scope.SPECIFICATION)
private final ScopedObjectHolder<BankAccountService> userDataSpecScope = new ScopedObjectHolder<BankAccountService>() {
private BankAccountService bankAccountService;
public void deleteBankAccountService() {
bankAccountService = null;
}
@Override
public BankAccountService create() {
bankAccountService = new BankAccountService();
return bankAccountService;
}
@Override
protected void destroy(BankAccountService bankAccountService) {
deleteBankAccountService();
}
};
@BeforeExample
public void setUp() {
this.workFlow = new WorkFlow(this);
this.homePage = new HomePage(this);
}
public MultiValueResult setUpOnBoardingData(String fullName) throws IOException {
HttpEasyReader resp = userDataSpecScope.get().createDefaultUserAccountFromFullName(fullName);
return new MultiValueResult()
.with("username", resp.getJsonReader().jsonPath("user.username").getAsString())
.with("password", "s3cret");
}
public boolean triggerOnBoardingProcessForUser(String username, String password) throws IOException {
this.homePage = this.workFlow.loginWorkFlow(username, password);
this.homePage.getOnBoardingProcessComponent().waitForOnBoardingDialogLoaded();
return true;
}
public MultiValueResult processOnBoardingFlow(String bankName, String routingNumber, String accountNumber) {
this.getBrowser().getDriver().navigate().refresh();
return this.homePage
.getOnBoardingProcessComponent()
.waitForOnBoardingDialogLoaded()
.processOnBoardingWithBankingInfo(bankName, routingNumber, accountNumber);
}
}
=== Markdown file ===
# On-Boarding
As a newly created user, I want the system to walk me through the On-boarding process so that
I could link a bank profile to my user account.
### Rules: OnBoarding process behavior
- The on-boarding process is triggered to the newly created users.
It's triggered once user logs into the application, and would be stopped if user finished setting up banking account.
* This rule is dependent on:
- [Create newly user](SignUp.md#create_new_user)
### [Background](-):
Given [Dave Lopp](- "#fullName"), a [newly created user](- "#data=setUpOnBoardingData(#fullName)"), was on the Login page
##### [Scenario:](- "trigger on-boarding process") On-boarding process is triggered for newly created users once they log in
<div>
<p concordion:execute="#result=triggerOnBoardingProcessForUser(#data.username, #data.password)">
When he logs into the application with valid credentials
Then the on-boarding process is triggered [properly](- "c:assert-true=#result")
</p>
</div>
#### [Scenario:](- "on-boarding for users") User could pass the on-boarding process with valid banking information
Given he [was On-boarding process](- "triggerOnBoardingProcessForUser(#data.username, #data.password)")
<div>
<p concordion:execute="#process=processOnBoardingFlow(#bankName,#routingNumber,#accountNumber)">
When he provides valid banking information
|Bank Name|Routing Number|Account Number|
|---|---|---|
|<span concordion:set="#bankName">American Bank</span>|<span concordion:set="#routingNumber">031302997</span>|<span concordion:set="#accountNumber">000123456789</span>|
</p>
</div>
Then he could finish the process [successfully](- "c:assert-true=#process.result")
My Fixture file is a mix of action needed browser interaction and api services. My idea of writing this file along with markdown file is
setUpData: calling createUser service, and use this user across to the spec and NO need to invoke the browser instance <<< in my view, it should relate to
Scope.SPECIFICATION
. In markdown file, it places on section called BackgroundThe methods in the fixture file maps correspondingly to the sections in markdown file (scenarios).
But when calling the fixture file, the background section triggers browser as well, and causes error. So I would like to ask/clarify is there any existing feature to invoke the browser manually ? , or, any ways to handle SPEC_SCOPE without invoking browser instance while using CubanoTemplateFixture ?
=== Markdown file ===