Start test;
Endpoint: https://frontend-test-assignment-api.abz.agency/api/v1; 17.08.2025 02:57:08

============================================================
## GET api/v1/token
Without headers
Without params
STATUS: 200

OUTPUT:
{
    "success": true,
    "token": "eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9"
}

============================================================

============================================================
## GET api/v1/positions
Without headers
Without params
STATUS: 200

OUTPUT:
{
    "success": true,
    "positions": [
        {
            "id": 1,
            "name": "Lawyer"
        },
        {
            "id": 2,
            "name": "Content manager"
        },
        {
            "id": 3,
            "name": "Security"
        },
        {
            "id": 4,
            "name": "Designer"
        }
    ]
}

============================================================

============================================================
## GET api/v1/user/1
Without headers
Request params:
[id => '1']
STATUS: 200

OUTPUT:
{
    "success": true,
    "user": {
        "id": 1,
        "name": "Leanne West",
        "email": "onie34@lubowitz.com",
        "phone": "+380936050764",
        "position_id": 2,
        "position": "Content manager",
        "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a6596d3bb1.jpeg"
    }
}

============================================================

============================================================
## GET api/v1/user/2
Without headers
Request params:
[id => '2']
STATUS: 200

OUTPUT:
{
    "success": true,
    "user": {
        "id": 2,
        "name": "Ahmad Rodriguez",
        "email": "isadore08@zulauf.biz",
        "phone": "+380993215621",
        "position_id": 3,
        "position": "Security",
        "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a6596f0072.jpeg"
    }
}

============================================================

============================================================
## GET api/v1/user/99999
Without headers
Request params:
[id => '99999']
STATUS: 404

OUTPUT:
{
    "success": false,
    "message": "User not found"
}

============================================================

============================================================
## GET api/v1/user/-1
Without headers
Request params:
[id => '-1']
STATUS: 400

OUTPUT:
{
    "success": false,
    "message": "The user with the requestedid does not exist",
    "fails": {
        "userId": [
            "The user id must be at least 1."
        ]
    }
}

============================================================

============================================================
## GET api/v1/user/str
Without headers
Request params:
[id => 'str']
STATUS: 400

OUTPUT:
{
    "success": false,
    "message": "The user with the requestedid does not exist",
    "fails": {
        "userId": [
            "The user id must be an integer."
        ]
    }
}

============================================================

============================================================
## GET api/v1/users?page=1&count=5
Without headers
Request params:
[page => '1']
[count => '5']
STATUS: 200

OUTPUT:
{
    "success": true,
    "total_pages": 9,
    "total_users": 45,
    "count": 5,
    "page": 1,
    "links": {
        "next_url": "https:\/\/frontend-test-assignment-api.abz.agency\/api\/v1\/users?page=2&count=5",
        "prev_url": null
    },
    "users": [
        {
            "id": 1,
            "name": "Leanne West",
            "email": "onie34@lubowitz.com",
            "phone": "+380936050764",
            "position": "Content manager",
            "position_id": 2,
            "registration_timestamp": 1604494937,
            "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a6596d3bb1.jpeg"
        },
        {
            "id": 2,
            "name": "Ahmad Rodriguez",
            "email": "isadore08@zulauf.biz",
            "phone": "+380993215621",
            "position": "Security",
            "position_id": 3,
            "registration_timestamp": 1604494937,
            "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a6596f0072.jpeg"
        },
        {
            "id": 3,
            "name": "Jeromy Schultz",
            "email": "gladys74@emmerich.com",
            "phone": "+380957332233",
            "position": "Security",
            "position_id": 3,
            "registration_timestamp": 1604494937,
            "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a659709143.jpeg"
        },
        {
            "id": 4,
            "name": "Lorine Hoppe",
            "email": "ozella.block@wiza.com",
            "phone": "+380996727011",
            "position": "Designer",
            "position_id": 4,
            "registration_timestamp": 1604494937,
            "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a65971a714.jpeg"
        },
        {
            "id": 5,
            "name": "Peaches-Honeyblossom-Michelle-Charlotte-Angel-Vanessa",
            "email": "peaches.honeyblossom.michelle.charlotte.angel.vanessa@gmail.com",
            "phone": "+380672278518",
            "position": "Designer",
            "position_id": 4,
            "registration_timestamp": 1604494937,
            "photo": "https:\/\/frontend-test-assignment-api.abz.agency\/images\/users\/5fa2a65972a8f5.jpeg"
        }
    ]
}

============================================================

============================================================
## GET api/v1/users?page=-1&count=5
Without headers
Request params:
[page => '-1']
[count => '5']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "page": [
            "The page must be at least 1."
        ]
    }
}

============================================================

============================================================
## GET api/v1/users?page=str&count=5
Without headers
Request params:
[page => 'str']
[count => '5']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "page": [
            "The page must be an integer."
        ]
    }
}

============================================================

============================================================
## GET api/v1/users?page=9999&count=5
Without headers
Request params:
[page => '9999']
[count => '5']
STATUS: 404

OUTPUT:
{
    "success": false,
    "message": "Page not found"
}

============================================================

============================================================
## GET api/v1/users?page=1&count=200
Without headers
Request params:
[page => '1']
[count => '200']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "count": [
            "The count may not be greater than 100."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'M']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '1']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "name": [
            "The name must be at least 2 characters."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'The string is longer than the allowed value, the string is longer than the allowed value']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '1']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "name": [
            "The name may not be greater than 60 characters."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example']
[phone => '+380987809143']
[position_id => '1']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "email": [
            "The email format is invalid."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+780987809143']
[position_id => '1']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "phone": [
            "The phone format is invalid."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '999']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "position_id": [
            "Position with id: '999' does not exist."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => 'str']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "position_id": [
            "The position id must be an integer."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '-1']
[photo => 'mime: image/jpeg|resolution:960 x 595 px|filesize: 168 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "position_id": [
            "The position id must be at least  1."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '1']
[photo => 'mime: image/gif|resolution:1280 x 640 px|filesize: 665 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "photo": [
            "The photo must be jpeg\/jpg type."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '1']
[photo => 'mime: image/jpeg|resolution:3264 x 2448 px|filesize: 5826 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "photo": [
            "The photo may not be greater than 5 Mb."
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => 'Maurice']
[email => 'maurice.mills65@example.com']
[phone => '+380987809143']
[position_id => '999']
[photo => 'mime: image/jpeg|resolution:50 x 50 px|filesize: 2 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "position_id": [
            "Position with id: '999' does not exist."
        ],
        "photo": [
            "The minimum resolution should be 70x70 pixels"
        ]
    }
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => '']
[email => '']
[phone => '']
[position_id => '']
[photo => '']
STATUS: 500

OUTPUT:
null

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'BAD TOKEN']
Request params:
[name => '']
[email => '']
[phone => '']
[position_id => '']
[photo => '']
STATUS: 401

OUTPUT:
{
    "success": false,
    "message": "Invalid token. Try to get a new one by the method POST api\/v1\/token."
}

============================================================

============================================================
## POST api/v1/users
Request headers:
[Token => 'eyJpdiI6IkNtS25lbDFIRlF5QzhBdFNNOXE2dGc9PSIsInZhbHVlIjoiclp5a3BvelwveTlsb0VrRURNTU1jYlwvbkxTSkRhQ0h3MU5mMEpLenpQQ0dDNW1DT3hKN2JTRko5TmJITG1lcTQ3a0tLcWRNYjFqeGk1Mmp5RWhhTGxIZz09IiwibWFjIjoiMTM4ZjRlY2ZjYzY3MDU1N2Y3MGZmZTk1NjExMTQ4YmQ3OGI1YWEwN2I2NjI5Zjk0YWM5ZDcxOWFlNmQ1NzE0ZSJ9']
Request params:
[name => '']
[email => '']
[phone => '']
[position_id => '']
[photo => 'mime: image/jpeg|resolution:501 x 500 px|filesize: 96 Kb']
STATUS: 422

OUTPUT:
{
    "success": false,
    "message": "Validation failed",
    "fails": {
        "name": [
            "The name field is required."
        ],
        "email": [
            "The email field is required."
        ],
        "phone": [
            "The phone field is required."
        ],
        "position_id": [
            "The position id field is required."
        ],
        "photo": [
            "Image is invalid."
        ]
    }
}

============================================================