Accounts Selection

A response can use values of one or more mock accounts selected for this transaction. The values can be populated into the response payload, used to control the delay or select the HTTP status.

The selection usually happens based on some value in the request. For example, the request can contain an account number, and a mock account with the same account number can be selected.

The accounts selection is performed in the Accounts Selection section of the response configuration, and the selected accounts are placed into $account/$accounts and account/accounts variables for XQuery and Javascript. Read more about account variables here.

Execution with No Accounts

By default, every response has no accounts selected. The accounts selection dialog looks like this:

The account/accounts variables are empty. Only the values from the request are available to build the response.

Execution with Accounts

To select an accounts (or a group of accounts) we need to add a selection expression.

Click on the plus button:

A new selection equation is added.

Select the mock account property name from the drop-down list. In the right side of the equation write a script of value the property should be equal to for an account to be selected. Most often the value on the right side is read from the request, e.g. here it is read from the request XML elememt which is named office-id:

In other words, we:

1 Read the value from the request using XQuery $input//*:office-id (say it is equal to 1234)
2 Search for all mock accounts that have the property officeId with the value 1234
3 Set all the found accounts to the variable $accounts (accounts for Javascript)
4 Set one random account of the found ones to the variable $account (account for Javascript)

Selection with Multiple Conditions

There could be more than one condition to select an account. For example, an account can be selected by its property flow (a subset of accounts seeded to test a specific test flow) and then by the office-id value from the request, like below:

Note that all conditions must be true for an account to be selected (i.e., logical AND join). MockMotor currently doesn't support logical OR join.

Actions if Not Found

What if the search for accounts doesn’t yield any results? There are three options available: fail, ignore and continue and create.

Note that if no conditions are defined, none of these options are in effect.

Fail Immediately

This is the default option.

With this option, when no accounts found matching the conditions, MockMotor fails the request with HTTP 500 and a descriptive error message:

HTTP/1.1 500 Server Error
Date: Mon, 04 Sep 2017 19:45:33 GMT
Content-Length: 406

com.rfctr.mockmotor.engine.MockMotorException: No accounts found with 
  variable officeId matching values '[100500]' computed as '$input//*:office-id'
in response 'Selecting Account with XQ and got none'
	com.rfctr.mockmotor.responses.ResponseExecutor.matchAndExecuteResponse(ResponseExecutor.java:111)
	com.rfctr.mockmotor.engine.MockMotorRequestsHandler.handle(MockMotorRequestsHandler.java:188)
	...

Ignore and Continue

This option allows you to continue the execution of the current response even if no accounts were found to satisfy our conditions.

The values of $accounts/accounts and $account/account will be empty (null for Javascript). The response scripts can then make decisions based on the lack of the accounts - for example, set the response payload error code to ACCOUNT_NOT_FOUND or similar to simulate the behaviour of a real backend service.

Create New

The last option allows you to create a mock account if it doesn’t exist. This option is useful for testing scenarios such as registration flows, where the registration ID is generated by some other system and cannot be predicted (and cannot be seeded into a mock account).

MockMotor creates an empty mock account with all properties null except the ones specified in the selection condition. In the example above, the value from the request element <office-id> will be populated into the officeId property of the new account.

The new account is bound to $accounts/accounts and $account/account variables.

The response may also update the account after the execution using the dialog in the Update Accounts section.