{
  "version": "1.0",
  "exported_at": 1715608731,
  "name": "Okta SCIM 2.0 SPEC Test",
  "description": "Basic tests to see if your SCIM server will work with Okta",
  "trigger_url": "https://api.runscope.com/radar/37d9f10e-e250-4071-9cec-1fa30e56b42b/trigger",
  "steps": [
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Test Users endpoint",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users?count=1&startIndex=1",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:ListResponse",
          "property": "schemas"
        },
        {
          "comparison": "is_a_number",
          "source": "response_json",
          "value": null,
          "property": "itemsPerPage"
        },
        {
          "comparison": "is_a_number",
          "source": "response_json",
          "value": null,
          "property": "startIndex"
        },
        {
          "comparison": "is_a_number",
          "source": "response_json",
          "value": null,
          "property": "totalResults"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].id"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].name.familyName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].name.givenName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].userName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].active"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "Resources[0].emails[0].value"
        }
      ],
      "variables": [
        {
          "source": "response_json",
          "name": "ISVUserid",
          "property": "Resources[0].id"
        }
      ],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Get Users/{{id}} ",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users/{{ISVUserid}}",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "id"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "name.familyName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "name.givenName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "userName"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "active"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "emails[0].value"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{ISVUserid}}",
          "property": "id"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Test invalid User by username",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users?filter=userName eq \"{{InvalidUserEmail}}\"",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:ListResponse",
          "property": "schemas"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "0",
          "property": "totalResults"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Test invalid User by ID",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users/{{UserIdThatDoesNotExist}}",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "404"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "detail"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:Error",
          "property": "schemas"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Make sure random user doesn't exist",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users?filter=userName eq \"{{randomEmail}}\"",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "equal_number",
          "source": "response_json",
          "value": "0",
          "property": "totalResults"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:ListResponse",
          "property": "schemas"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Create Okta user with realistic values",
      "auth": {},
      "body": "{\"schemas\":[\"urn:ietf:params:scim:schemas:core:2.0:User\"],\"userName\":\"{{randomUsername}}\",\"name\":{\"givenName\":\"{{randomGivenName}}\",\"familyName\":\"{{randomFamilyName}}\"},\"emails\":[{\"primary\":true,\"value\":\"{{randomEmail}}\",\"type\":\"work\"}],\"displayName\":\"{{randomGivenName}} {{randomFamilyName}}\",\"active\":true}",
      "form": {},
      "multipart_form": [],
      "binary_body": null,
      "headers": {
        "Content-Type": [
          "application/json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json; charset=utf-8"
        ]
      },
      "method": "POST",
      "url": "{{SCIMBaseURL}}/Users",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "201"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "true",
          "property": "active"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "id"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomFamilyName}}",
          "property": "name.familyName"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomGivenName}}",
          "property": "name.givenName"
        },
        {
          "comparison": "contains",
          "source": "response_json",
          "value": "urn:ietf:params:scim:schemas:core:2.0:User",
          "property": "schemas"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomUsername}}",
          "property": "userName"
        }
      ],
      "variables": [
        {
          "source": "response_json",
          "name": "idUserOne",
          "property": "id"
        },
        {
          "source": "response_json",
          "name": "randomUserEmail",
          "property": "emails[0].value"
        }
      ],
      "scripts": [
        ""
      ],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Verify that user was created",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users/{{idUserOne}}",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomUsername}}",
          "property": "userName"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomFamilyName}}",
          "property": "name.familyName"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "{{randomGivenName}}",
          "property": "name.givenName"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 10
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Expect failure when recreating user with same values",
      "auth": {},
      "body": "{\"schemas\":[\"urn:ietf:params:scim:schemas:core:2.0:User\"],\"userName\":\"{{randomUsername}}\",\"name\":{\"givenName\":\"{{randomGivenName}}\",\"familyName\":\"{{randomFamilyName}}\"},\"emails\":[{\"primary\":true,\"value\":\"{{randomUsername}}\",\"type\":\"work\"}],\"displayName\":\"{{randomGivenName}} {{randomFamilyName}}\",\"active\":true}",
      "form": {},
      "multipart_form": [],
      "binary_body": null,
      "headers": {
        "Content-Type": [
          "application/json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json; charset=utf-8"
        ]
      },
      "method": "POST",
      "url": "{{SCIMBaseURL}}/Users",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "409"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Username Case Sensitivity Check",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users?filter=userName eq \"{{randomUsernameCaps}}\"",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Optional Test: Verify Groups endpoint",
      "auth": {},
      "multipart_form": [],
      "headers": {
        "Accept-Charset": [
          "utf-8"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "Accept": [
          "application/scim+json"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Groups",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "200"
        },
        {
          "comparison": "is_less_than",
          "source": "response_time",
          "value": "600"
        }
      ],
      "variables": [],
      "scripts": [
        "var data = JSON.parse(response.body);\nvar max = data.totalResults;\nvar res = data.Resources;\nvar exists = false;\n\nif (max === 0)\n\tassert(\"nogroups\", \"No Groups found in the endpoint\");\nelse if (max >= 1 && Array.isArray(res)) {\n    exists = true;\n    assert.ok(exists, \"Resources is of type Array\");\n\tlog(exists);\n}"
      ],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Check status 401",
      "multipart_form": [],
      "headers": {
        "Accept": [
          "application/scim+json"
        ],
        "Accept-Charset": [
          "utf-8"
        ],
        "Authorization": [
          "non-token"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "auth": {},
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users?filter=userName eq \"{{randomUsernameCaps}}\"",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "401"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "detail"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "401",
          "property": "status"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:Error",
          "property": "schemas"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    },
    {
      "step_type": "pause",
      "skipped": false,
      "duration": 5
    },
    {
      "step_type": "request",
      "skipped": false,
      "note": "Required Test: Check status 404",
      "multipart_form": [],
      "headers": {
        "Accept": [
          "application/scim+json"
        ],
        "Accept-Charset": [
          "utf-8"
        ],
        "Authorization": [
          "{{auth}}"
        ],
        "Content-Type": [
          "application/scim+json; charset=utf-8"
        ],
        "User-Agent": [
          "OKTA SCIM Integration"
        ]
      },
      "auth": {},
      "method": "GET",
      "url": "{{SCIMBaseURL}}/Users/00919288221112222",
      "assertions": [
        {
          "comparison": "equal_number",
          "source": "response_status",
          "value": "404"
        },
        {
          "comparison": "not_empty",
          "source": "response_json",
          "value": null,
          "property": "detail"
        },
        {
          "comparison": "equal",
          "source": "response_json",
          "value": "404",
          "property": "status"
        },
        {
          "comparison": "has_value",
          "source": "response_json",
          "value": "urn:ietf:params:scim:api:messages:2.0:Error",
          "property": "schemas"
        }
      ],
      "variables": [],
      "scripts": [],
      "before_scripts": []
    }
  ]
}