Table of contents

General

In our Technical Documentation the required information when working with the Testify API is listed.

The Testify API can be used to query information from Testify, but also to create and update information. With help of the Testify API it is easily possible to connect Testify to your own systems and exchange information in an automated way.

The Testify API is a REST API which can be accessed via authenticated HTTP requests (using an API key). The documentation with all available endpoints can be found at https://cloud.testify.io/core/services/swagger/index.html and it is recommended to use the most recent version, which at the moment of writing this documentation is Testify API v2.0. Note that as of now all listed versions are supported, but it is not recommended to use the internal or older APIs as these might get deprecated in the future.

Depending on whether the https://cloud.testify.io/ stage or an own stage is used, the StageBaseUrl can differ and must be adapted in the request URL (and also in the Swagger UI URL). All examples in this documentation use https://cloud.testify.io as StageBaseUrl and assume that the Testify stage is used.

Authentication

To access the Testify API a Testify user with a valid API key is needed. This API key must then be sent in every requests header.

Please be aware that a user in Testify has roles and permissions and is allowed to make certain requests based on that. An API key is always generated for a certain Testify user and when making a request with an API key the permissions of that user are used. Therefore, it is advised to create an own Interface User that has all roles and permissions needed for accessing the endpoints.

Create Interface User and generate API Key

  1. Go to https://cloud.testify.io/todos and Log In with your regular account.

  2. Go to “Administration” → “Users” and create a new Interface User with a self defined password and all roles assigned.

  3. Within the User’s Profile, click on the context menu and select “Generate API key”.

  4. Note the API key that consists of secret, Subject and Tenant.

Please be aware that this API key can only be viewed once and must be regenerated otherwise. Regenerating means disabling the previous used API key.

Authenticate with API Key

  1. Place secret, Subject and Tenant in request header.

External vs. Internal ID in Testify Public API

Many entities in Testify namely checklist templates, checklist instances, testobjects, testobject-types testequipments, testequipment-types, customfields, issue categories, groups and users have an external and an internal ID. The internal id must be a globally unique identifier in the format of “00000000-0000-0000-0000-000000000000“, whereas the external id can be in a format more readable for humans to better recognize the object and must also be unique.

E.g. internal id: 9033d3c6-5897-484c-a247-61cc4e636920, external id: my-testobject

Users can choose an external ID to make it easy to correlate the entities to entities in other systems. For example, when testobjects are synced with an ERP system, you could reuse the IDs of the ERP system and set the external IDs in testify with that value. That will make it easy later on to find the correlationg test object for an entity in your ERP system by just doing an ID lookup.

Where does the Testify Public API use External IDs?

In General, all IDs used by the Testify Public API are external IDs.

What happens when no External ID is provided when creating objects?

An internal ID is always automatically generated by the system itself. The external ID can be chosen when creating the entity via the API by just assigning a value to the ID property. This value has to be unique, though. When creating an object without providing an external ID, it automatically gets set to the value of the generated internal ID.

HTTP Methods

With GET requests the details of an entity can be queried.

A POST request method is used when a new entity should be created and the data is usually sent as JSON in the request body.

A PUT endpoint is used when an existing entity should be updated. The updated entity is usually sent as JSON in the request body and all properties get updated.

The PATCH endpoints can be used to update single properties of an entity.

If a property is included in the JSON request body, it's value should be updated with the value from the JSON. All other properties that are not included will stay the same as before. To delete an optional property value this can be done by setting the property in the JSON to NULL.

For properties that contain lists, NULL and an empty array both will mean the list will be emptied after the update. If you want to update a list you have to provide the complete list of entries again that should be set after the update operation.

Webhooks

Webhooks allow you to respond on events that occur in Testify in an automated way, without the need to make requests repeatedly. To use webhooks a HTTP server where Testify is allowed to send POST requests is needed. When this is available, it can be easily configured within Testify on what events should be reacted to and to which URL the request should be sent to.

How to define a webhook within Testify

  1. As logged in User go to “Administration” → “Workflows” and create a new Workflow.

  2. Define a Name.

  3. Define an Event.

  4. Define an Action with scope “Webhook” and type “trigger”.

  5. Click on “Parameters” and provide the URL of the webhook that should be called and can be accessed by Testify via POST request. As an optional parameter, an Identifier can be specified, which then will be sent in the request body. Also, the request timeout and the HTTP status codes that indicate success can be customized, as well as some authorization options containing of a secret and HTTP headers. Please consider that Content-Type: application/json and Content-Length HTTP headers are set implicitly as default by Testify and can't be added here.

  6. Save newly created workflow, which then automatically gets invoked when the specified event occurs.

  7. To see when a webhook has been executed and whether the execution has been successful, go to the workflow details, click on the context menu and select “History”.

Samples of what information will be sent in the webhook payload

The HTTP method is always POST and the payload depends on the event that triggered the webhook.

Property

Description

WebHookIdentifier

This is set to the identifier that can be set as an optional parameter at the webhook configuration (see above).

IssueFilter, ChecklistFilter, TestObjectFilter, PdfFilter, UserFilter, or TimerFilter

Depending on the event that triggered the workflow these are set.

TriggeredByWorkflowId

Id of the workflow that triggered the event. Only set if the event was triggered by a workflow.

TenantId

Id of the tenant.

EntityType

Gives information about the event that triggered the webhook: 1 (issue), 2 (checklist), 3 (testobject), 4 (pdf), 5 (user), or 6 (timertrigger).

Action

Tells whether 1 (created) or 2 (updated) triggered the webhook.

In our case a checklist has been created, so 1 is set.

ChangedValues

Only set if the triggering event is an update event. Shows the values that were changed in this update.

EntityId

External Id of the object that triggered the webhook.

In our case this is the external id of the created checklist.

EntityUrl

URL where details of the object that triggered the webhook can be found.

In our case the created checklist can be queried via GET-request to this URL.

CreatedAt

Date and time when the event took place.

{
    "webHookIdentifier": "string",
    "issueFilter": {
      "createdById": "00000000-0000-0000-0000-000000000000",
      "modifiedById": "00000000-0000-0000-0000-000000000000",
      "assignedToId": "00000000-0000-0000-0000-000000000000",
      "testObjectId": "00000000-0000-0000-0000-000000000000",
      "testObjectExternalId": "string",
      "testObjectTypeId": "00000000-0000-0000-0000-000000000000",
      "state": "issueState",
      "issueCategoryId": "00000000-0000-0000-0000-000000000000",
      "issueSeverityId": "00000000-0000-0000-0000-000000000000",
      "title": "string",
      "description": "string",
      "scheduledFor": "2023-03-27T11:08:24.661Z"
    },
    "checklistFilter": {
      "externalId": "string",
      "createdById": "00000000-0000-0000-0000-000000000000",
      "modifiedById": "00000000-0000-0000-0000-000000000000",
      "assignedToId": "00000000-0000-0000-0000-000000000000",
      "testObjectId": "00000000-0000-0000-0000-000000000000",
      "testObjectExternalId": "string",
      "testObjectTypeId": "00000000-0000-0000-0000-000000000000",
      "state": "testItemState",
      "checklistTemplateId": "00000000-0000-0000-0000-000000000000",
      "scheduledFor": "2023-03-27T11:08:24.661Z",
      "score": 0
    },
    "testObjectFilter": {
      "createdById": "00000000-0000-0000-0000-000000000000",
      "testObjectTypeId": "00000000-0000-0000-0000-000000000000",
      "testObjectId": "00000000-0000-0000-0000-000000000000",
      "testObjectExternalId": "string"
    },
    "pdfFilter": {
      "pdfProfileId": "00000000-0000-0000-0000-000000000000",
      "userId": "00000000-0000-0000-0000-000000000000"
    },
    "userFilter": {
      "userId": "00000000-0000-0000-0000-000000000000",
      "groupIds": [
        "00000000-0000-0000-0000-000000000000"
      ],
      "roleIds": [
        "string"
      ]
    },
    "timerFilter": {
      "actorId": "00000000-0000-0000-0000-000000000000",
      "cronExpression": "string"
    },
    "triggeredByWorkflowId": "00000000-0000-0000-0000-000000000000",
    "tenantId": "00000000-0000-0000-0000-000000000000",
    "entityType": "subscriptionEntityType",
    "action": "eventActions",
    "changedValues": {
      "additionalProp1": {
        "oldValue": {},
        "newValue": {}
      },
      "additionalProp2": {
        "oldValue": {},
        "newValue": {}
      },
      "additionalProp3": {
        "oldValue": {},
        "newValue": {}
      }
    },
    "entityId": "00000000-0000-0000-0000-000000000000",
    "entityUrl": "string",
    "createdAt": "2023-03-27T11:08:24.661Z",
    "testifyCorrelationId": "string"
}

IssueState

Draft = 0,
Opened = 1,
Resolved = 2,
Verified = 3,
Deleted = 99

TestItemState

Open = 0,
InProgress = 1,
Completed = 2, (deprecated)
Done = 3,
Verified = 4,
Removed = 99

SubscriptionEntityType

Issue = 1,
Checklist = 2,
TestObject = 3,
Pdf = 4,
User = 5,
TimerTigger = 6

EventActions

Created = 1,
Modified = 2

Here are some samples of sent information in the webhook payload:

{
    "WebHookIdentifier": null,
    "IssueFilter": null,
    "ChecklistFilter": {
        "ExternalId": "0878ec9e-62f1-4e65-be5c-42856f611420",
        "CreatedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "ModifiedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "AssignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "TestObjectId": "34229f43-df5b-4d96-9a48-d1778ebf952b",
        "TestObjectTypeId": "f4256bc1-400d-4bfe-9a4d-d3f48fd7fd7f",
        "State": 0,
        "ChecklistTemplateId": "f4a42636-995c-4231-bbf5-919909e40a69",
        "ScheduledFor": "2022-04-04T22:00:00Z",
        "Score": null
    },
    "TestObjectFilter": null,
    "PdfFilter": null,
    "UserFilter": null,
    "TimerFilter": null,
    "TriggeredByWorkflowId": null,
    "TenantId": "0d629d72-3831-4874-8151-4b97f55523ff",
    "EntityType": 2,
    "Action": 1,
    "ChangedValues": null,
    "EntityId": "0878ec9e-62f1-4e65-be5c-42856f611420",
    "EntityUrl": "https://cloud.testify.io/tests/0878ec9e-62f1-4e65-be5c-42856f611420/data",
    "CreatedAt": "2022-04-04T10:23:27.3557053Z"
}
{
    "WebHookIdentifier": null,
    "IssueFilter": {
        "CreatedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "ModifiedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "AssignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "TestObjectId": "63be7657-2314-4704-b1d7-8de444f89039",
        "TestObjectTypeId": "f4256bc1-400d-4bfe-9a4d-d3f48fd7fd7f",
        "State": 1,
        "IssueCategoryId": "c6246372-21df-49e5-b95e-073f000d775b",
        "Severity": 2,
        "Title": "test",
        "Description": null,
        "ScheduledFor": "2022-04-04T22:00:00Z"
    },
    "ChecklistFilter": null,
    "TestObjectFilter": null,
    "PdfFilter": null,
    "UserFilter": null,
    "TimerFilter": null,
    "TriggeredByWorkflowId": null,
    "TenantId": "0d629d72-3831-4874-8151-4b97f55523ff",
    "EntityType": 1,
    "Action": 1,
    "ChangedValues": null,
    "EntityId": "abb33d1f-6787-444b-b43f-aee7147c3d49",
    "EntityUrl": "https://cloud.testify.io/issues/abb33d1f-6787-444b-b43f-aee7147c3d49",
    "CreatedAt": "2022-04-04T10:30:26.5496694Z""
}
{
    "WebHookIdentifier": null,
    "IssueFilter": {
        "CreatedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "ModifiedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "AssignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
        "TestObjectId": "34229f43-df5b-4d96-9a48-d1778ebf952b",
        "TestObjectTypeId": "f4256bc1-400d-4bfe-9a4d-d3f48fd7fd7f",
        "State": 2,
        "IssueCategoryId": "c6246372-21df-49e5-b95e-073f000d775b",
        "Severity": 2,
        "Title": "test",
        "Description": null,
        "ScheduledFor": "2022-04-04T22:00:00Z"
    },
    "ChecklistFilter": null,
    "TestObjectFilter": null,
    "PdfFilter": null,
    "UserFilter": null,
    "TimerFilter": null,
    "TriggeredByWorkflowId": null,
    "TenantId": "0d629d72-3831-4874-8151-4b97f55523ff",
    "EntityType": 1,
    "Action": 2,
    "ChangedValues": {
        "duration": {
            "oldValue": null,
            "newValue": 5
        },
        "state": {
            "oldValue": 1,
            "newValue": 2
        }
    },
    "EntityId": "d9507dd0-d767-4ab9-8bf2-dc9f6c37bf22",
    "EntityUrl": "https://cloud.testify.io/issues/d9507dd0-d767-4ab9-8bf2-dc9f6c37bf22",
    "CreatedAt": "2022-04-04T10:34:47.8509246Z"
}

Authenticated webhook requests

As mentioned above additional parameters for sending authenticated webhook requests can be specified in the webhook “Parameters”. So the target of the webhook is able to verify the integrity of an incoming webhook request. This is possible by 2 differnt mechanisms:

  1. Adding arbitrary HTTP-Headers: This consists of key-value pairs which are then sent in the HTTP headers, e.g. Username: {Username}, Password: {Password}. Please be aware that this should only be done when using a secure channel like HTTPS, TLS.

  2. Signing the webhook request with a pre-shared secret: This adds the following two additional HTTP headers to the webhook request - Testify-Webhook-Signature and Testify-Webhook-Signature-Timestamp. The Testify-Webhook-Signature is a hashed value, which is created from a timestamp and the request payload by using SHA256 HMAC with the provided “secret” in the webhook parameters and then base64 encoding. Represented as: base64(HMACSHA256(TIMESTAMP + BODY))
    To verify the signature, create the same SHA256 HMAC signature (containing of the Testify-Webhook-Signature-Timestamp and the request payload) with the provided secret, then base64 encoding and compare it to the Testify-Webhook-Signature sent in the request header. See following example:

    public bool VerifyWebhook([FromBody] object body)
    {
        var secret = "my-secret";
        var signature = this.Request.Headers.GetValues("Testify-Webhook-Signature").FirstOrDefault();
        var timestamp = this.Request.Headers.GetValues("Testify-Webhook-Signature-Timestamp").FirstOrDefault();
        var parsedBody = JsonConvert.SerializeObject(body);
    
        using (var hmac = new HMACSHA256(Encoding.ASCII.GetBytes(secret)))
        {
            var encodedSignature = Convert.ToBase64String(
                                  hmac.ComputeHash(
                                  Encoding.ASCII.GetBytes($"{timestamp}{parsedBody}")));
            return signature == encodedSignature;
        }
    }

Example of a complete use case

This example shows a complete use case using Testify API. First a testobject is created and for this testobject a checklist is instantiated. When the checklist is completed in Testify two webhooks are called, one that fetches the check results and one that informs us about a generated PDF for that checklist and downloads it.

  1. Create testobject via Testify API:

    1. Send POST-request

      • Endpoint: {StageBaseUrl}/public/testobjects?api-version=2.0

      • HTTP method: POST

      • HTTP headers: API key (secret, Subject, Tenant), Content-Type: application/json, Content-Length

      • Payload (approach 1): Both the internal id and the external id are automatically set by the system and are the same.

        {
          "testObjectTypeId": "F4BBD5AA-7F27-4D9E-976C-23AB258A21B9",
          "title": "My new testobject",
          "identifier": "my-new-testobject",
          "description": "testobject created by api",
          "parentId": null
        }
      • OR Payload (approach 2) including self-assigned external id: The external id is set to my-testobject and the internal id is automatically set by the system.

        {
          "testObjectTypeId": "F4BBD5AA-7F27-4D9E-976C-23AB258A21B9",
          "title": "My new testobject",
          "identifier": "my-new-testobject",
          "description": "testobject created by api",
          "parentId": null,
          "id": "my-testobject"
        }
    2. Testobject has successfully been created if response has statuscode 200 OK and payload contains external id of new testobject. If response statuscode is 400 Bad Request something in the request is wrong, but error details are provided in the payload.

  2. Instantiate checklist for newly created testobject via Testify API:

    1. Send POST-request:

      • Endpoint: {StageBaseUrl}/public/checklists?api-version=2.0

      • HTTP method: POST

      • HTTP headers: API key (secret, Subject, Tenant), Content-Type: application/json, Content-Length

      • Payload (approach 1): testObjectId contains the external id of the above created testobject.

        {
          "testObjectId": "306a9227-0ce6-4fd6-8418-bdbab6a474d7", // or "my-testobject"
          "templateId": "f4a42636-995c-4231-bbf5-919909e40a69",
          "assignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
          "scheduledFor": "2022-04-04T22:00:00.000Z"
        }
      • OR Payload (approach 2) including self-assigned external id:

        {
          "testObjectId": "306a9227-0ce6-4fd6-8418-bdbab6a474d7", // or "my-testobject"
          "templateId": "f4a42636-995c-4231-bbf5-919909e40a69",
          "assignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
          "scheduledFor": "2022-04-04T22:00:00.000Z",
          "id": "my-checklist"
        }
    2. Checklist has successfully been started when response has statuscode 200 OK and payload contains external id of new checklist instance. If response statuscode is 400 Bad Request something in the request is wrong, but error details are provided in the payload.

  3. React to webhook informing us of completed checklist and fetch check results:

    Prerequisites 1 - Before completing the checklist: Configure webhook that should be triggered (see above).
    Event details: Scope: “Checklist”, Type: “updated”, Triggers: State = “Done”
    Action details: Scope “Webhook”, Type: “trigger”, provide URL

    1. Parse Webhook payload:

      • ChangedValues shows state change from 0 (open) to 3 (done) and new modifiedAt date.

      • EntityId is needed to fetch the checklist results.

        {
            "WebHookIdentifier": null,
            "IssueFilter": null,
            "ChecklistFilter": {
                "ExternalId": "9033d3c6-5897-484c-a247-61cc4e636920",
                "CreatedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "ModifiedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "AssignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "TestObjectId": "306a9227-0ce6-4fd6-8418-bdbab6a474d7",
                "TestObjectTypeId": "f4bbd5aa-7f27-4d9e-976c-23ab258a21b9",
                "State": 3,
                "ChecklistTemplateId": "f4a42636-995c-4231-bbf5-919909e40a69",
                "ScheduledFor": "2022-04-04T22:00:00Z",
                "Score": null
            },
            "TestObjectFilter": null,
            "PdfFilter": null,
            "UserFilter": null,
            "TimerFilter": null,
            "TriggeredByWorkflowId": null,
            "TenantId": "0d629d72-3831-4874-8151-4b97f55523ff",
            "EntityType": 2,
            "Action": 2,
            "ChangedValues": {
                "modifiedAt": {
                    "oldValue": "2022-04-04T13:53:05.463Z",
                    "newValue": "2022-04-04T14:18:45.7983551Z"
                },
                "state": {
                    "oldValue": 0,
                    "newValue": 3
                }
            },
            "EntityId": "9033d3c6-5897-484c-a247-61cc4e636920",
            "EntityUrl": "https://cloud.testify.io/tests/9033d3c6-5897-484c-a247-61cc4e636920/data",
            "CreatedAt": "2022-04-04T14:19:36.2492712Z"
        }
    2. Send GET-Request to fetch checklist results:

      • Endpoint: {StageBaseUrl}/public/checklists/{EntityId}/results/flat?api-version=2.0

      • HTTP method: GET

      • HTTP headers: API key (secret, Subject, Tenant)

      • Payload: no payload

    3. The response should have status code 200 OK and gives details of the checklist instance with all testcases. Details to this response can be found below at “Structure of checklist results” section.

  4. React to webhook informing us of generated PDF for checklist and download it:

    Prerequisites 1 - Before completing the checklist: Configure workflow that automatically generates PDF.
    Event details: Scope: “Checklist”, Type: “updated”, Triggers: State = “Done”
    Action details: Scope: “PDF”, Type: “generate”, select PDF protocol profile and language

    Prerequisites 2 - Before completing the checklist: Configure webhook that should be triggered.
    Event details: Scope: “PDF”, Type: “Checklist PDF generated”
    Action details: Scope “Webhook”, Type: “trigger”, provide URL

    1. Parse Webhook payload:

      • EntityUrl is needed to get created PDF.

        {
            "WebHookIdentifier": null,
            "IssueFilter": null,
            "ChecklistFilter": {
                "ExternalId": "9033d3c6-5897-484c-a247-61cc4e636920",
                "CreatedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "ModifiedById": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "AssignedToId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157",
                "TestObjectId": "306a9227-0ce6-4fd6-8418-bdbab6a474d7",
                "TestObjectTypeId": "f4bbd5aa-7f27-4d9e-976c-23ab258a21b9",
                "State": 3,
                "ChecklistTemplateId": "7760b4d2-d8e0-45e2-ba41-19cfd0ecdda6",
                "ScheduledFor": "2022-04-04T22:00:00Z",
                "Score": null
            },
            "TestObjectFilter": null,
            "PdfFilter": {
                "PdfProfileId": "5a359ecf-4d29-40c3-853a-8a9a6868e12d",
                "UserId": "4ee99e3e-04fd-4ded-b4c6-1463c7b6a157"
            },
            "UserFilter": null,
            "TimerFilter": null,
            "TriggeredByWorkflowId": "e4ac9840-a499-4d4f-bbcb-8103d5c289b0",
            "TenantId": "0d629d72-3831-4874-8151-4b97f55523ff",
            "EntityType": 4,
            "Action": 1,
            "ChangedValues": null,
            "EntityId": "97c282e6-885d-4109-983f-14317ac29cda",
            "EntityUrl": "https://cloud.testify.io/0d629d72-3831-4874-8151-4b97f55523ff/97/97c282e6-885d-4109-983f-14317ac29cda.pdf",
            "CreatedAt": "2022-04-04T14:21:57.6884096Z"
        }
    2. Send GET-Request to get created PDF and download it:

      • Endpoint: EntityUrl

      • HTTP method: GET

      • HTTP headers: no headers

      • Payload: no payload

    3. The response should have status code 200 OK and gives the created PDF as payload.

Localization

All localizations implemented in Testify can also be used in the Testify API. Every tenant has a default language which normally is English (US). Following languages are available:

Iso-Code

Title

bs

Bosanski

de-AT

Deutsch

en-GB

English (UK)

en-IN

English (India)

en-US

English (US)

es-MX

Español

fr

Français

nl

Nederlands

pt-BR

Português

ru

русский

zh-CN

中文(中国)

zh-TW

中文(台灣)

Example for creating a custom field with a title in multiple languages

  1. Send POST-Request:

  2. The response should have status code 200 OK and gives the custom field key of the newly created custom field.

Structure of Testify checklists

Entities

Enumeration types

Many endpoints use enumeration types in their request or response body. In the Testify API they are represented by their integer value. Some important examples are listed below:

Checklist Template Revision State (revisionState)

Draft = 0,
Published = 1,
Deprecated = 2,
Disabled = 4

Checklist Instance State

Open = 0,
InProgress = 1,
Completed = 2,
Done = 3,
Verified = 4,
Removed = 99

Testcase Result Value Type

String = 1,
Numeric = 2,
Boolean = 3,
DateTime = 4,
Attachment = 5,
Localization = 6,
Array = 7,
Attachments = 8,
TestObjects = 9,
GeoPosition = 10,
Signature = 11

Enum
Number

Name

Example Value

Explanation

1

String

"text"

Entered string value

2

Numeric

0.000000000000

Entered numeric value, at calculation check list of values (example below)

3

Boolean

true

Either true or false

4

DateTime

1970-01-01T08:00:00Z (at time check),

2022-12-31T23:00:00Z (at date check)

Selected datetime (at time check the date is always set to 1970-01-01)

5

Attachment

{
    "id": "8cbc8bb8-c23c-4e8a-950c-28fab7eacf4d",
    "file": "encoded-file",
    "mimeType": "image/png",
    "fileName": "my-image.png"
}

Attachment containing id, url, mimeType, fileName

6

Localization

"07a237e9-54e1-4e56-8e20-e3c629af4669"

Id of the selected label

7

Array

[0, 1]

List of selected options

8

Attachments

[
    {
        "id": "03ddf4ce-e4e4-4ece-b641-effb4aabd3ab",
        "url": "url-to-file.pdf",
        "mimeType": "application/pdf",
        "fileName": "my-file.pdf"
    }
]

List of attachments containing id, url, mimeType, fileName

9

TestObjects

["34229F43-DF5B-4D96-9A48-D1778EBF952B"]

List of ExternalIds of selected test objects

10

GeoPosition

{
    "latitude": 48.312272,
    "longitude": 14.298747
}

Object containing latitude and longitude

11

Signature

{
    "name": "Username",
    "id": "32761784-c345-433c-887a-31e392248912",
    "file": "file",
    "fileName": "Username.png"
}

Signature containing name, id, file and fileName

Testcase Plugin Parameter Type

String = 1,
Numeric = 2,
Boolean = 3,
DateTime = 4,
LocalizedString = 5,
StringArray = 6,
NumericArray = 7,
BooleanArray = 8,
DateTimeArray = 9,
LocalizedStringArray = 10,
JsonStringArray = 11,
TestObjectTypeArray = 12

Enum
Number

Name

Example Value

1, 6, 11, 12

String, StringArray, JsonStringArray, TestObjectTypeArray

"text"

2, 7

Numeric, NumericArray

0.000000000000

3, 8

Boolean, BooleanArray

true

4, 9

DateTime, DateTimeArray

2021-01-01 00:00:00.000

5, 10

LocalizedString, LocalizedStringArray

{
    "id": "73f19913-9ccb-4a8f-82b2-25151cc16ded",
    "translations": {
        "en-US": "english translation"
    }
}

List of Check Types (TestCase Plugins) with result and parameter structure

The result type always refers to the TestCase Result Value Typeand the parameter type always refers to TestCase Plugin Parameter Type (see above, with examples about how the value can look like)

Testify offers 11 different check types (internally called TestCase Plugins). The different check types contain different types of data which are described in this section.

{
    "id": "63a0287d-dbca-41cb-b371-2218d4e41732",
    "templateId": "58a13f79-a87b-43c7-ad6a-af4b736e6646",
    "templateRevisionId": "58a13f79-a87b-43c7-ad6a-af4b736e6646",
    "testObjectId": "34229F43-DF5B-4D96-9A48-D1778EBF952B",
    "assignedToId": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "modifiedById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "state": 2,
    "createdAt": "2022-12-23T07:44:50.18Z",
    "modifiedAt": "2022-12-23T07:47:30.843Z",
    "scheduledFor": "2022-12-23T23:00:00Z",
    "testCases": [
        {
            "result": {
                "createdAt": "2022-12-23T07:45:15.313Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": {
                            "id": "8cbc8bb8-c23c-4e8a-950c-28fab7eacf4d",
                            "file": "encoded-file",
                            "mimeType": "image/png",
                            "fileName": "my-image.png"
                        },
                        "type": 5
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "photoCheck",
            "id": "de8d53a3-a5f9-4110-b790-37a40c0c7345",
            "plugin": {
                "name": "testify_photo_upload_testcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:17.933Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": [
                            0,
                            1
                        ],
                        "type": 7
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "multiSelectCheck",
            "id": "94c8cd40-96c8-4ceb-a3ed-220baa1e3977",
            "plugin": {
                "name": "testify_multi_selection_testcase",
                "parameters": [
                    {
                        "name": "checkScores",
                        "value": 1.000000000000,
                        "type": 7,
                        "order": 0
                    },
                    {
                        "name": "checkScores",
                        "value": 1.000000000000,
                        "type": 7,
                        "order": 1
                    },
                    {
                        "name": "checkScores",
                        "value": 1.000000000000,
                        "type": 7,
                        "order": 2
                    },
                    {
                        "name": "mustSelectAll",
                        "value": false,
                        "type": 3,
                        "order": 0
                    },
                    {
                        "name": "options",
                        "value": {
                            "id": "c0b7cb70-ec9b-43e4-8017-68cb5ca42a2a",
                            "translations": {
                                "en-US": "Option A"
                            }
                        },
                        "type": 10,
                        "order": 0
                    },
                    {
                        "name": "options",
                        "value": {
                            "id": "220baecc-99b5-4443-ab0b-d5d796c17162",
                            "translations": {
                                "en-US": "Option B"
                            }
                        },
                        "type": 10,
                        "order": 1
                    },
                    {
                        "name": "options",
                        "value": {
                            "id": "5ea7c40c-8157-4938-9206-4c07108c4333",
                            "translations": {
                                "en-US": "Option C"
                            }
                        },
                        "type": 10,
                        "order": 2
                    },
                    {
                        "name": "optionValidities",
                        "value": true,
                        "type": 8,
                        "order": 0
                    },
                    {
                        "name": "optionValidities",
                        "value": true,
                        "type": 8,
                        "order": 1
                    },
                    {
                        "name": "optionValidities",
                        "value": false,
                        "type": 8,
                        "order": 2
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:22.187Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": 25.000000000000,
                        "type": 2
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "numericCheck",
            "id": "a9ca836a-2c47-4c94-b0ca-d9af570e07d7",
            "plugin": {
                "name": "testify_numerictestcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "decimalPlaces",
                        "value": 2.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "placeholderText",
                        "value": {
                            "id": "cf7792a8-5853-4742-964b-f468ed3460e8",
                            "translations": {
                                "en-US": "Measured Value"
                            }
                        },
                        "type": 5,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:33.45Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": "1970-01-01T08:00:00Z",
                        "type": 4
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "timeCheck",
            "id": "c61703d8-df93-44d8-b1b1-5e7de8ecc7a4",
            "plugin": {
                "name": "testify_timetestcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "placeholderText",
                        "value": {
                            "id": "6c96fa07-b502-48bb-b2a4-e3175d8b2e49",
                            "translations": {
                                "en-US": "Time"
                            }
                        },
                        "type": 5,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:39.86Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": 10.000000000000,
                        "type": 2
                    },
                    {
                        "name": "value0",
                        "value": 5.000000000000,
                        "type": 2
                    },
                    {
                        "name": "value1",
                        "value": 5.000000000000,
                        "type": 2
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "calculationCheck",
            "id": "bacffaeb-ff6d-43c5-8a88-078362aebb49",
            "plugin": {
                "name": "testify_calculation_testcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "decimalPlaces",
                        "value": 2.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "fieldLabels",
                        "value": {
                            "id": "88b2b24d-761d-4c0b-a43f-c31a6a4f4dc4",
                            "translations": {
                                "en-US": "Value 1"
                            }
                        },
                        "type": 10,
                        "order": 0
                    },
                    {
                        "name": "fieldLabels",
                        "value": {
                            "id": "f7721682-0ea2-4237-ae7b-6aa8d143d7ad",
                            "translations": {
                                "en-US": "Value 2"
                            }
                        },
                        "type": 10,
                        "order": 1
                    },
                    {
                        "name": "function",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:42.433Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": "07a237e9-54e1-4e56-8e20-e3c629af4669",
                        "type": 6
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "singleChoiceCheck",
            "id": "d613e2c4-21a6-4ec8-906d-bed5e7186c1b",
            "plugin": {
                "name": "testify_single_choice_testcase",
                "parameters": [
                    {
                        "name": "checkScores",
                        "value": 1.000000000000,
                        "type": 7,
                        "order": 0
                    },
                    {
                        "name": "checkScores",
                        "value": 1.000000000000,
                        "type": 7,
                        "order": 1
                    },
                    {
                        "name": "labels",
                        "value": {
                            "id": "07a237e9-54e1-4e56-8e20-e3c629af4669",
                            "translations": {
                                "en-US": "Option A"
                            }
                        },
                        "type": 10,
                        "order": 0
                    },
                    {
                        "name": "labels",
                        "value": {
                            "id": "1b81f6c2-bdc1-46f1-8cee-095526c10568",
                            "translations": {
                                "en-US": "Option B"
                            }
                        },
                        "type": 10,
                        "order": 1
                    },
                    {
                        "name": "optionValidities",
                        "value": true,
                        "type": 8,
                        "order": 0
                    },
                    {
                        "name": "optionValidities",
                        "value": false,
                        "type": 8,
                        "order": 1
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:45:50.283Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": "2022-12-31T23:00:00Z",
                        "type": 4
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "dateCheck",
            "id": "d5989e18-d826-4093-9919-baa946db9758",
            "plugin": {
                "name": "testify_datetestcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "placeholderText",
                        "value": {
                            "id": "73f19913-9ccb-4a8f-82b2-25151cc16ded",
                            "translations": {
                                "en-US": "Date"
                            }
                        },
                        "type": 5,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:46:07.893Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": [
                            "34229F43-DF5B-4D96-9A48-D1778EBF952B"
                        ],
                        "type": 9
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "testObjectSelectionCheck",
            "id": "a6187560-ee72-4d0e-997a-7c4ddaec889a",
            "plugin": {
                "name": "testify_test_object_selection_testcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "multiselect",
                        "value": false,
                        "type": 3,
                        "order": 0
                    },
                    {
                        "name": "positiveValidation",
                        "value": true,
                        "type": 3,
                        "order": 0
                    },
                    {
                        "name": "selectionType",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:46:10.307Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": true,
                        "type": 3
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "logicalCheck",
            "id": "fc88d1fc-ded9-4b39-8bab-87562a2b15ff",
            "plugin": {
                "name": "testify_booleantestcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:46:13.9Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": "text",
                        "type": 1
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "textCheck",
            "id": "3f3e8520-9752-44c3-8b53-8b014bdd5ba5",
            "plugin": {
                "name": "testify_texttestcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "placeholderText",
                        "value": {
                            "id": "7a092ee6-8de0-47a9-9faf-89fc31579c4f",
                            "translations": {
                                "en-US": "Text"
                            }
                        },
                        "type": 5,
                        "order": 0
                    }
                ]
            }
        },
        {
            "result": {
                "createdAt": "2022-12-23T07:47:30.567Z",
                "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
                "values": [
                    {
                        "name": "value",
                        "value": [
                            {
                                "id": "03ddf4ce-e4e4-4ece-b641-effb4aabd3ab",
                                "url": "url-to-file.pdf",
                                "mimeType": "application/pdf",
                                "fileName": "my-file.pdf"
                            }
                        ],
                        "type": 8
                    }
                ],
                "isValid": true,
                "score": null
            },
            "previousResults": [],
            "identifier": "fileUploadCheck",
            "id": "9784ba2c-ba38-47d4-b04e-27bd84752387",
            "plugin": {
                "name": "testify_file_upload_testcase",
                "parameters": [
                    {
                        "name": "checkScoreNegativeResult",
                        "value": 0.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "checkScorePositiveResult",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "maxNumberOfFiles",
                        "value": 5.000000000000,
                        "type": 2,
                        "order": 0
                    },
                    {
                        "name": "minNumberOfFiles",
                        "value": 1.000000000000,
                        "type": 2,
                        "order": 0
                    }
                ]
            }
        }
    ]
}

Logical Check - testify_booleantestcase

"result": {
    "createdAt": "2022-12-23T07:46:10.307Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": true,
            "type": 3
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_booleantestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

labelFalse

5

0

labelTrue

5

0

quickInput

3

0

Calculation Check - testify_calculation_testcase

The result contains a list of numeric value results.

"result": {
    "createdAt": "2022-12-23T07:45:39.86Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": 10.000000000000,
            "type": 2
        },
        {
            "name": "value0",
            "value": 5.000000000000,
            "type": 2
        },
        {
            "name": "value1",
            "value": 5.000000000000,
            "type": 2
        }
    ],
    "isValid": true,
    "score": null
},
"plugin": {
    "name": "testify_calculation_testcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "decimalPlaces",
            "value": 2.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "fieldLabels",
            "value": {
                "id": "88b2b24d-761d-4c0b-a43f-c31a6a4f4dc4",
                "translations": {
                    "en-US": "Value 1"
                }
            },
            "type": 10,
            "order": 0
        },
        {
            "name": "fieldLabels",
            "value": {
                "id": "f7721682-0ea2-4237-ae7b-6aa8d143d7ad",
                "translations": {
                    "en-US": "Value 2"
                }
            },
            "type": 10,
            "order": 1
        },
        {
            "name": "function",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

fieldLabels

10

1

decimalPlaces

2

1

function

2

1

isScoringEnabled

3

0

maxValue

2

0

maxWarnValue

2

0

minValue

2

0

minWarnValue

2

0

resultFieldLabel

5

0

setPointValue

2

0

unitSuffix

1

0

warnText

5

0

defaultValue

7

0

checkIdentifier

6

0

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

formula

1

0

Date Check - testify_datetestcase

"result": {
    "createdAt": "2022-12-23T07:45:50.283Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": "2022-12-31T23:00:00Z",
            "type": 4
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_datetestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "placeholderText",
            "value": {
                "id": "73f19913-9ccb-4a8f-82b2-25151cc16ded",
                "translations": {
                    "en-US": "Date"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}
"plugin": {
    "name": "testify_datetestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "placeholderText",
            "value": {
                "id": "73f19913-9ccb-4a8f-82b2-25151cc16ded",
                "translations": {
                    "en-US": "Date"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

placeholderText

5

1

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

maxValue

4

0

minValue

4

0

File Upload Check - testify_file_upload_testcase

The result contains a list of attachments containing id, url, mimeType, fileName.

"result": {
  "createdAt": "2022-12-23T07:47:30.567Z",
  "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
  "values": [
      {
          "name": "value",
          "value": [
              {
                  "id": "03ddf4ce-e4e4-4ece-b641-effb4aabd3ab",
                  "url": "url-to-file.pdf",
                  "mimeType": "application/pdf",
                  "fileName": "my-file.pdf"
              }
          ],
          "type": 8
      }
  ],
  "isValid": true,
  "score": null
}
"plugin": {
    "name": "testify_file_upload_testcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "maxNumberOfFiles",
            "value": 5.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "minNumberOfFiles",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

maxNumberOfFiles

2

1

minNumberOfFiles

2

1

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

Multi Select Check - testify_multi_selection_testcase

The result contains a list of selected options (details about the options can be found in the test case plugin parameters).

"result": {
    "createdAt": "2022-12-23T07:45:17.933Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": [
                0,
                1
            ],
            "type": 7
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_multi_selection_testcase",
    "parameters": [
        {
            "name": "checkScores",
            "value": 1.000000000000,
            "type": 7,
            "order": 0
        },
        {
            "name": "checkScores",
            "value": 1.000000000000,
            "type": 7,
            "order": 1
        },
        {
            "name": "checkScores",
            "value": 1.000000000000,
            "type": 7,
            "order": 2
        },
        {
            "name": "mustSelectAll",
            "value": false,
            "type": 3,
            "order": 0
        },
        {
            "name": "options",
            "value": {
                "id": "c0b7cb70-ec9b-43e4-8017-68cb5ca42a2a",
                "translations": {
                    "en-US": "Option A"
                }
            },
            "type": 10,
            "order": 0
        },
        {
            "name": "options",
            "value": {
                "id": "220baecc-99b5-4443-ab0b-d5d796c17162",
                "translations": {
                    "en-US": "Option B"
                }
            },
            "type": 10,
            "order": 1
        },
        {
            "name": "options",
            "value": {
                "id": "5ea7c40c-8157-4938-9206-4c07108c4333",
                "translations": {
                    "en-US": "Option C"
                }
            },
            "type": 10,
            "order": 2
        },
        {
            "name": "optionValidities",
            "value": true,
            "type": 8,
            "order": 0
        },
        {
            "name": "optionValidities",
            "value": true,
            "type": 8,
            "order": 1
        },
        {
            "name": "optionValidities",
            "value": false,
            "type": 8,
            "order": 2
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

mustSelectAll

3

1

options

10

1

optionValidities

8

1

checkScores

7

0

isScoringEnabled

3

0

Numeric Check - testify_numerictestcase

"result": {
    "createdAt": "2022-12-23T07:45:22.187Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": 25.000000000000,
            "type": 2
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_numerictestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "decimalPlaces",
            "value": 2.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "placeholderText",
            "value": {
                "id": "cf7792a8-5853-4742-964b-f468ed3460e8",
                "translations": {
                    "en-US": "Measured Value"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

placeholderText

5

1

decimalPlaces

2

1

isScoringEnabled

3

0

maxValue

2

0

maxWarnValue

2

0

minValue

2

0

minWarnValue

2

0

quickInput

3

0

setPointValue

2

0

unitSuffix

1

0

warnText

5

0

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

Photo Upload Check - testify_photo_upload_testcase

The result contains an attachment with id, url, mimeType, fileName.

"result": {
    "createdAt": "2022-12-23T07:45:15.313Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": {
                "id": "8cbc8bb8-c23c-4e8a-950c-28fab7eacf4d",
                "file": "encoded-file",
                "mimeType": "image/png",
                "fileName": "my-image.png"
            },
            "type": 5
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_photo_upload_testcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

Single Choice Check - testify_single_choice_testcase

The result contains the selected label (details about the labels can be found in the test case plugin parameters).

"result": {
    "createdAt": "2022-12-23T07:45:42.433Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": "07a237e9-54e1-4e56-8e20-e3c629af4669",
            "type": 6
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_single_choice_testcase",
    "parameters": [
        {
            "name": "checkScores",
            "value": 1.000000000000,
            "type": 7,
            "order": 0
        },
        {
            "name": "checkScores",
            "value": 1.000000000000,
            "type": 7,
            "order": 1
        },
        {
            "name": "labels",
            "value": {
                "id": "07a237e9-54e1-4e56-8e20-e3c629af4669",
                "translations": {
                    "en-US": "Option A"
                }
            },
            "type": 10,
            "order": 0
        },
        {
            "name": "labels",
            "value": {
                "id": "1b81f6c2-bdc1-46f1-8cee-095526c10568",
                "translations": {
                    "en-US": "Option B"
                }
            },
            "type": 10,
            "order": 1
        },
        {
            "name": "optionValidities",
            "value": true,
            "type": 8,
            "order": 0
        },
        {
            "name": "optionValidities",
            "value": false,
            "type": 8,
            "order": 1
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

labels

10

1

optionValidities

8

1

quickInput

3

0

showOptionsHorizontally

3

0

checkScores

7

0

isScoringEnabled

3

0

Test Object Selection Check - testify_test_object_selection_testcase

The result contains a list of ExternalIds of the selected test objects.

"result": {
    "createdAt": "2022-12-23T07:46:07.893Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": [
                "34229F43-DF5B-4D96-9A48-D1778EBF952B"
            ],
            "type": 9
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_test_object_selection_testcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "multiselect",
            "value": false,
            "type": 3,
            "order": 0
        },
        {
            "name": "positiveValidation",
            "value": true,
            "type": 3,
            "order": 0
        },
        {
            "name": "selectionType",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

multiselect

3

1

positiveValidation

3

1

selectionType

2

1

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

testObjectType

12

0

Text Check - testify_texttestcase

"result": {
    "createdAt": "2022-12-23T07:46:13.9Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": "text",
            "type": 1
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_texttestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "placeholderText",
            "value": {
                "id": "7a092ee6-8de0-47a9-9faf-89fc31579c4f",
                "translations": {
                    "en-US": "Text"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

placeholderText

5

1

quickInput

3

0

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

jsonStringArray

11

0

matchString

1

0

Time Check - testify_timetestcase

The result contains the selected datetime (at time check the date is always set to 1970-01-01).

"result": {
    "createdAt": "2022-12-23T07:45:33.45Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": "1970-01-01T08:00:00Z",
            "type": 4
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_timetestcase",
    "parameters": [
        {
            "name": "checkScoreNegativeResult",
            "value": 0.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "checkScorePositiveResult",
            "value": 1.000000000000,
            "type": 2,
            "order": 0
        },
        {
            "name": "placeholderText",
            "value": {
                "id": "6c96fa07-b502-48bb-b2a4-e3175d8b2e49",
                "translations": {
                    "en-US": "Time"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

placeholderText

5

1

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

maxValue

4

0

minValue

4

0

Geoposition Check - testify_geopositioncheck

The result contains the selected latitude and longitude.

"result": {
    "createdAt": "2023-07-21T06:14:22.92Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": {
                "latitude": 48.312272,
                "longitude": 14.298747
            },
            "type": 10
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_geopositioncheck",
    "parameters": [
        {
            "name": "placeholderText",
            "value": {
                "id": "ec9a5f29-4323-4217-9868-a09a701c2a1c",
                "translations": {
                    "de-AT": "Geoposition"
                }
            },
            "type": 5,
            "order": 0
        }
    ]
}

Possible parameters:

Name

ParameterType

IsMandatory

placeholderText

5

1

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

Signature Check - testify_signaturecheck

The result contains the signature-file.

"result": {
    "createdAt": "2023-07-21T06:14:30.787Z",
    "createdById": "4EE99E3E-04FD-4DED-B4C6-1463C7B6A157",
    "values": [
        {
            "name": "value",
            "value": {
                "name": "Username",
                "id": "32761784-c345-433c-887a-31e392248912",
                "file": "encoded-file",
                "fileName": "Username.png"
            },
            "type": 11
        }
    ],
    "isValid": true,
    "score": null
}
"plugin": {
    "name": "testify_signaturecheck",
    "parameters": []
}

Possible parameters:

Name

ParameterType

IsMandatory

checkScoreNegativeResult

2

0

checkScorePositiveResult

2

0

isScoringEnabled

3

0

Add check result

Endpoints

There are two endpoints where check results can be added. They differ in whether the checkId or the checkIdentifier ist set. Both - checkId and checkIdentifier- can be queried at the GET /public/checklists/{externalId}/results/flat endpoint. (which is described above)

  1. POST /public/checklists/checkresult: Add check result by checkId.

  2. POST /public/checklists/checkresult/identifier: Add check result by human-readable checkIdentifier.

Request Body for different Check Types

{
    "checkIdentifier": "check1",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": true,
            "name": "value",
            "type": 3
        }
    }
}

Consider using a numeric check instead, as here the single values and also the calculated result needs to be sent as multiple values.

{
    "checkIdentifier": "check2",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value0": {
            "name": "value0",
            "type": 2,
            "value": 20
        },
        "value1": {
            "name": "value1",
            "type": 2,
            "value": 20
        },
        "value": {
            "name": "value",
            "type": 2,
            "value": 40
        }
    }
}
{
    "checkIdentifier": "check3",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": "2023-03-15T23:00:00.000Z",
            "name": "value",
            "type": 4
        }
    }
}
{
    "checkIdentifier": "check4",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": [
            {
                "id": "<generatedId>",
                "file": "data:image/png;base64,iVBORw0KG[...]",
                "fileName":"my-image.png",
                "targetType":3
            }],
            "name": "value",
            "type": 8
        }
    }
}

The result value contains a list of selected options (details about the options can be found in the test case plugin parameters).

{
    "checkIdentifier": "check5",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": [0,1],
            "name": "value",
            "type": 7
        }
    }
}
{
    "checkIdentifier": "check6",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": 2,
            "name": "value",
            "type": 2
        }
    }
}
{
    "checkIdentifier": "check7",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": {
                "id": "<generatedId>",
                "file": "data:image/png;base64,iVBORw0KG[...]",
                "fileName":"my-image.png",
                "targetType":3    
            },
            "name": "value",
            "type": 5
        }
    }
}

The result value contains the id of the selected label (details about the labels can be found in the test case plugin parameters).

{
    "checkIdentifier": "check8",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": "<labelId>",
            "name": "value",
            "type": 6
        }
    }
}
{
    "checkIdentifier": "check9",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": [
            {
                "id": "<testObjectId>"
            }],
            "name": "value",
            "type": 9
        }
    }
}
{
    "checkIdentifier": "check10",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": "text",
            "name": "value",
            "type": 1
        }
    }
}

The result value contains the selected datetime (at time check the date is always set to 1970-01-01)

{
    "checkIdentifier": "check11",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": "1970-01-01T12:00:00Z",
            "name": "value",
            "type": 4
        }
    }
}

The result value contains the selected latitude and longitude

{
    "checkIdentifier": "check12",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": {
                "latitude": 48.312272,
                "longitude": 14.298747
            },
            "name": "value",
            "type": 10
        }
    }
}

The result value contains the signature as file (only png allowed)

{
    "checkIdentifier": "check13",
    "checklistId": "<checklistInstanceId>",
    "isValid": true,
    "checkResultValues": {
        "value": {
            "value": {
                "id": "<generatedId>",
                "name": "username.png",
                "file": "data:image/png;base64,[...]",
                "filename":"username.png",
                "targettype": 11
            },
            "name": "value",
            "type": 11
        }
    }
}