2021 September Release

ExamplePermanent link for this heading

This chapter describes a unit test scenario with all features available to the developer.

ScenarioPermanent link for this heading

The app needs two users and a group to test all the functionality, so it is a good idea to create a scenario which is used in all tests.


scenario SCTwoUsers {
  User meyer;
  User mueller;

  init = expression {
    CreateUserData @userdata;
    @userdata.crfirstname = "Julia <~testscope~>";
    @userdata.crsurname = "Meyer";
    @userdata.crlogname = "julia.meyer.<~sessionid~><~testscope~>@pair.com";
    meyer = coouser.CreateTestUser(@userdata);
    mueller = coouser.CreateTestUser(null);

Note: To create users there is a special usecase FSCDUCXUNIT@1.1001:CreateTestUser. This usecase takes some initialization data and creates a valid user in the current environment.

Scenario HierarchyPermanent link for this heading

To provide even more flexibility, a scenario can be based on another scenario, giving a hierarchy of scenarios.


scenario SCOneGroupTwoUsers: SCTwoUsers {
  Group pair;

  init = expression {
    CreateGroupData @groupdata = {
      crmembers: [meyer, mueller],
      crshortname: "Pair <~testscope~>"
    pair = coouser.CreateTestGroup(@groupdata);

Note: To create groups there is a special usecase FSCDUCXUNIT@1.1001:CreateTestGroup. This usecase takes some initialization data and creates a valid group in the current environment.

Unit TestsPermanent link for this heading

All unit tests can use this scenario to create their test environment.


test UTFolder using SCOneGroupTwoUsers {
  string foldername;

  init = expression {
    foldername = "TheFolderName";

  test = expression {
    %%ASSERT(meyer in pair.grmembers);
    %%ASSERT(mueller in pair.grmembers);
    %%ASSERT(coort.GetCurrentUser().GetAddress() == meyer.GetAddress());
    Folder fld = #Folder.ObjectCreate();
    fld.objname = foldername + ::sessionid;
    cooroot.ObjectLock(true, true);
    cooroot.objchildren += fld;
    %%ASSERT(coort.GetCurrentUser().GetAddress() == mueller.GetAddress());
    cooroot.ObjectLock(true, true);
    cooroot.objchildren += fld;

Note: After executing the test, the created objects need to be deleted, regardless of the success or failure of the test. This can be achieved by registering the new objects to the test session with the use case FSCDUCXUNIT@1.1001:AddToTestSession.

Session Start / StopPermanent link for this heading

Even in app.test these scenarios can be used to create the environment. All the required data for executing the tests are provided as parameters.


<Sequence clienttype="External" jarfile="apptest-commander.jar" classname="Commander">
  <Execution action='Select' location='Commands.StartScenario'/>
  <Execution action='Set' location='Commands.StartScenario.Scenario' value='FSCDUCXUNIT@1.1001:SCOneGroupTwoUsers'/>
  <Execution action='Set' location='Commands.StartScenario.Address' value='{~Run.address~}'/>
  <Execution action='Set' location='Commands.StartScenario.Username' value='Administrator'/>
  <Execution action='Set' location='Commands.StartScenario.SessionId' value='abc'/>
  <Execution action='Set' location='Commands.StartScenario.Password' value='{~Login.password~}'/>
  <Execution action='Set' location='Commands.StartScenario.DefaultUserPassword' value='{~Login.password~}'/>
  <Execution action='Set' location='Commands.StartScenario.SSLVerify' value='false'/>
  <Execution action='Execute' location='Commands.StartScenario'/>
  <Set parameter='id' location='Commands.StartScenario.CreatedSessionId'/>
  <Set parameter='sessionerror' location='Commands.StartScenario.ErrorMessage'/>
  <Validation ok='"{~sessionerror~}"!=""' />
  <Execution action='Close' location='Commands.StartScenario'/>

To remove the created objects the session can be closed, also.


<Sequence clienttype="External" jarfile="apptest-commander.jar" classname="Commander">
  <Execution action='Select' location='Commands.StopScenario'/>
  <Execution action='Set' location='Commands.StopScenario.SessionId' value='{~id~}'/>
  <Execution action='Set' location='Commands.StopScenario.Address' value='{~Run.address~}'/>
  <Execution action='Set' location='Commands.StopScenario.Username' value='Administrator'/>
  <Execution action='Set' location='Commands.StopScenario.Password' value='{~Login.password~}'/>
  <Execution action='Set' location='Commands.StopScenario.SSLVerify' value='false'/>
  <Execution action='Execute' location='Commands.StopScenario'/>
  <Set parameter='sessionerror' location='Commands.StopScenario.ErrorMessage'/>
  <Validation ok='"{~sessionerror~}"==""' />
  <Execution action='Close' location='Commands.StopScenario'/>