# qansigliere-testrail-api-integration

The main idea of ​​this library created in the JavaScript language is to provide a ready-made set of API methods for
integration with Testrail

## Author

https://www.youtube.com/@QANSIGLIERE/

## Support the project

https://buymeacoffee.com/qansigliere

## Installation

Using npm `npm i qansigliere-testrail-api-integration`

## How to use it

### Create a \*.env file

Create any \*.env file (like `testrail.env`) and write the following information in the created file

```
export TESTRAIL_URL="__YOUR_TESTRAIL_URL__"
export TESTRAIL_USERNAME="__YOUR_TESTRAIL_EMAIL__"
export TESTRAIL_APIKEY="__YOUR_TESTRAIL_APIKEY__"
```

### Make the \*.env file works

Just run in the terminal the following command: `source yourfile.env`

### And now You can make any API call to Your TestRail

```
var { TestRail_API } = require('qansigliere-testrail-api-integration');

(async function Demo() {
    let new_integration = new TestRail_API();
    let resp = await new_integration.get_templates(1);
    console.log(JSON.stringify(resp));
})();
```

## API Documentation

### Case Types

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077295487252-Case-Types)

#### get_case_types

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_case_types();
```

### Roles

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077853258772-Roles)

#### get_roles

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_roles();
```

### Statuses

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077935129364-Statuses)

#### get_case_statuses

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_case_statuses();
```

#### get_statuses

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_statuses();
```

### Templates

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077938165780-Templates)

#### get_templates

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_templates(1);
```

### Priorities

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077746564244-Priorities)

#### get_priorities

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_priorities();
```

### Result Fields

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077871398036-Result-Fields)

#### get_result_fields

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_result_fields();
```

### Runs

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077874763156-Runs)

#### get_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_run(1);
```

#### get_runs

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_runs(1);
```

#### add_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_run(1, {
    suite_id: 3,
    name: 'Generated by QANSIGLIERE',
    description: 'Created for DEMO',
    include_all: true,
});
```

#### update_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_run(2, {
    description: 'A description for the test run',
    include_all: true,
});
```

#### close_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.close_run(2, {});
```

### delete_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_run(2, {});
```

### BDDs

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7832161593620-BDDs)

#### get_bdd

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_bdd(5);
```

#### add_bdd

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_bdd(1, `test.txt`);
```

### Case Fields

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077281158164-Case-Fields)

#### get_case_fields

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_case_fields();
```

#### add_case_field

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_case_field({
    "type": "Multiselect",
    "name": "my_multiselect",
    "label": "My Multiselect",
    "description": "my custom Multiselect description",
    "configs": [
        {
            "context": {
                "is_global": true,
                "project_ids": ""
            },
            "options": {
                "is_required": false,
                "items": "1, One\n2, Two"
            }
        }
    ],
    "include_all": true
});
```

### Reports

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077825062036-Reports)

#### get_reports

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_reports(1);
```

#### run_report

```
let new_integration = new TestRail_API();
let resp = await new_integration.run_report(1);
```

### Variables

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077979742868-Variables)

#### get_variables

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_variables(1);
```

#### add_variable

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_variable(1, { id: 613, name: 'f' });
```

#### update_variable

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_variable(1, {
    id: 1171,
    name: 'age',
});
```

#### delete_variable

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_variable(1, {});
```

### Projects

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077792415124-Projects)

#### get_project

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_project(1);
```

#### get_projects

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_projects();
```

#### add_project

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_project({
    name: 'Generated via QANSIGLIERE API library',
    announcement: 'Welcome to my project',
    show_announcement: true,
});
```

#### update_project

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_project(7, {
    name: 'Updated via QANSIGLIERE API library',
    announcement: 'Subscribe to the channel',
    show_announcement: true,
});
```

#### delete_project

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_project(7, {});
```

### Results

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077819312404-Results)

#### get_results

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_results(14));
```

#### get_results_for_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_results_for_case(4, 14);
```

#### get_results_for_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_results_for_run(4);
```

#### add_result

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_result(14, { status_id: 5, comment: 'This test failed' });
```

#### add_result_for_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_result_for_case(4, 16, { status_id: 1, comment: 'This test passed' });
```

#### add_results

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_results(4, {
    results: [
        {
            test_id: 17,
            status_id: 1,
            comment: 'This test failed',
            defects: 'TR-7',
        },
        {
            test_id: 18,
            status_id: 5,
            comment: 'This test passed',
            elapsed: '5m',
            version: '1.0 RC1',
        },
        {
            test_id: 19,
            status_id: 2,
            comment: 'Assigned this test to Joe',
        },
    ],
});
```

#### add_results_for_cases

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_results_for_cases(4, {
    results: [
        {
            case_id: 17,
            status_id: 1,
            comment: 'This test failed',
            defects: 'TR-7',
        },
        {
            case_id: 18,
            status_id: 5,
            comment: 'This test passed',
            elapsed: '5m',
            version: '1.0 RC1',
        },
        {
            case_id: 19,
            status_id: 2,
            comment: 'Assigned this test to Joe',
        },
    ],
});
```

### Suites

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077936624276-Suites)

#### get_suite

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_suite(10);
```

#### get_suites

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_suites(4);
```

#### add_suite

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_suite(4, {
    name: 'This is a new test suite',
    description: 'Use the description to add additional context details',
});
```

#### update_suite

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_suite(11, {
    name: 'This is changed via API',
    description: 'Like this video',
});
```

#### delete_suite

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_suite(11, {});
```

### Sections

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077918603412-Sections)

#### get_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_section(9);
```

#### get_sections

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_sections(8, 10);
```

#### add_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_section(8, {
suite_id: 10,
    name: 'This section is generated via API',
    parent_id: 9,
});
```

#### move_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.move_section(10, {
    parent_id: null,
    after_id: 8,
});
```

#### update_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_section(10, {
    name: 'Updated via API',
});
```

#### delete_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_section(10, {});
```

### Milestones

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077723976084-Milestones)

#### get_milestone

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_milestone(1);
```

#### get_milestones

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_milestones(4);
```

#### add_milestone

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_milestone(4, {
     name: 'This milestone has been created via API',
});
```

#### update_milestone

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_milestone(2, {
    name: 'Updated via API',
});
```

#### delete_milestone

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_milestone(2, {});
```

### Groups

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077338821012-Groups)

#### get_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_group(1);
```

#### get_groups

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_groups();
```

#### add_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_group({
    name: 'New Group',
    user_ids: [1, 2, 3, 4, 5],
});
```

#### update_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_group(2, {
    group_id: 2,
    name: 'Updated Group via API',
    user_ids: [1, 2, 3, 4, 5],
});
```

#### delete_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_group(2, {});
```

### Users

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077978310292-Users)

#### get_user

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_user(1);
```

#### get_current_user

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_current_user(1);
```

#### get_user_by_email

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_user_by_email('qansigliere@gmail.com');
```

#### get_users

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_users();
```

#### get_users\_\_project_id

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_users__project_id(1);
```

#### add_user

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_user({
        name: 'Don Gun',
        email: 'qansigliere+1@gmail.com',
});
```

#### update_user

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_user(2, {
        name: 'Updated API',
});
```

### Tests

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077990441108-Tests)

#### get_test

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_test(20);
```

#### get_tests

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_tests(5);
// let resp = await new_integration.get_tests('5&limit=30&status_id=2');
```

### Shared Steps

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077919815572-Shared-Steps)

#### get_shared_step

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_shared_step(1);
```

#### get_shared_step_history

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_shared_step_history(1);
```

#### get_shared_steps

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_shared_steps(4);
```

#### add_shared_step

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_shared_step(4, {
    title: 'First Step',
       custom_steps_separated: [
        {
            content: 'Open home page',
            additional_info: 'Must be a new browser session',
            expected: 'Login page loads',
            refs: 'RF-1',
        },
        {
            content: 'Log In',
        },
    ],
});
```

#### update_shared_step

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_shared_step(2, {
    title: 'Updated VIA API',
    custom_steps_separated: [
        {
            content: 'Subscribe',
            additional_info: 'Must be a new comment here',
            expected: 'Login page loads',
            refs: 'RF-1',
        },
        {
            content: 'Log In',
        },
    ],
});
```

#### delete_shared_step

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_shared_step(2, {});
```

### Datasets

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077300491540-Datasets)

#### get_dataset

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_dataset(1);
```

#### get_datasets

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_datasets(4);
```

#### add_dataset

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_dataset(4, {
    id: 311,
    name: 'Def',
    variables: [],
});
```

#### update_dataset

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_dataset(3, {
    name: 'API',
    variables: [],
});
```

#### delete_dataset

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_dataset(3, {});
```

### Cases

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077292642580-Cases)

#### get_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_case(14);
```

#### get_cases

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_cases(4, 6);
// let resp = await new_integration.get_cases(4, '6&priority_id=4');
```

#### get_history_for_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_history_for_case(14);
```

#### add_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_case(5, {
    title: 'This is a test case',
    type_id: 1,
    priority_id: 3,
    estimate: '3m',
    refs: 'RF-1, RF-2',
    custom_steps_separated: [
        {
            content: 'Step 1',
            expected: 'Expected Result 1',
        },
        {
            content: 'Step 2',
            expected: 'Expected Result 2',
        },
        {
            shared_step_id: 3,
        },
    ],
});
```

#### copy_cases_to_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.copy_cases_to_section(5, {
    section_id: 5,
    case_ids: [22, 23]
});
```

#### update_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_case(11, {
    priority_id: 1,
    estimate: "5m"
});
```

#### update_cases

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_cases(6, {
    case_ids: [26, 27],
    priority_id: 1,
    estimate: "5m"
});
```

#### move_cases_to_section

```
let new_integration = new TestRail_API();
let resp = await new_integration.move_cases_to_section(12, {
    section_id: 12,
    suite_id: 6,
    case_ids: [26, 27]
});
```

#### delete_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_case(25, {});
```

#### delete_cases

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_cases(6, {
    case_ids: [23, 24],
});
```

### Plans

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077711537684-Plans)

#### get_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_plan(6);
```

#### get_plans

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_plans(9);
```

#### add_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_plan(9, {
    name: "System test",
    entries: [
        {
            suite_id: 12,
            name: "Custom run name",
            assignedto_id: 1 // ID of the assignee
        },
        {
            suite_id: 12,
            include_all: false, // Custom selection
            case_ids: [28, 29, 30]
        }
    ]
});
```

#### add_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_plan_entry(9, {
    suite_id: 12,
    include_all: true,
    runs: [
        {
            "include_all": false,
            "case_ids": [28],
        },
        {
            "include_all": false,
            "case_ids": [28, 29, 30],
        },
    ]
});
```

#### add_run_to_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_run_to_plan_entry(9, "0e165a00-bf50-4482-bde1-3134c1dacd50", {
    config_ids: [1],
    include_all: false,
    case_ids: [28, 29, 30]
});
```

#### update_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_plan(9, {
    name: "Updated VIA API",
});
```

#### update_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_plan_entry(9, "0e165a00-bf50-4482-bde1-3134c1dacd50", {
    name: "updated too",
    description: "it was updated via qansigliere JS lib"
});
```

#### update_run_in_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_run_in_plan_entry(10, {
    include_all: true,
});
```

#### close_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.close_plan(14, {});
```

#### delete_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_plan(15, {});
```

#### delete_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_plan_entry(9, "0e165a00-bf50-4482-bde1-3134c1dacd50", {});
```

#### delete_run_from_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_run_from_plan_entry(21, {});
```

### Configurations

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077298488340-Configurations)

#### get_configs

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_configs(9);
```

#### add_config_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_config_group(9, {
    name: "Browsers"
});
```

#### add_config

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_config(3, {
    name: "Chrome"
});
```

#### update_config_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_config_group(3, {
    "name": "Operating Systems"
});
```

#### update_config

```
let new_integration = new TestRail_API();
let resp = await new_integration.update_config(3, {
    "name": "Firefly"
});
```

#### delete_config_group

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_config_group(3, {});
```

#### delete_config

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_config(3, {});
```

### Attachments

TestRail documentation is present [here](https://support.testrail.com/hc/en-us/articles/7077196481428-Attachments)

#### add_attachment_to_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_attachment_to_case(24, 'icon.png');
```

#### add_attachment_to_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_attachment_to_plan(16, 'icon.png');
```

#### add_attachment_to_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_attachment_to_plan_entry(16, "0e165a00-bf50-4482-bde1-3134c1dacd50", 'icon.png');
```

#### add_attachment_to_result

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_attachment_to_result(46, 'icon.png');
```

#### add_attachment_to_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.add_attachment_to_run(22, 'icon.png');
```

#### get_attachments_for_case

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachments_for_case(28);
// let resp = await new_integration.get_attachments_for_case('11&limit=1');
```

#### get_attachments_for_plan

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachments_for_plan(16);
```

#### get_attachments_for_plan_entry

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachments_for_plan_entry(16, "0e165a00-bf50-4482-bde1-3134c1dacd50");
```

#### get_attachments_for_run

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachments_for_run(10);
```

#### get_attachments_for_test

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachments_for_test(26);
```

#### get_attachment

```
let new_integration = new TestRail_API();
let resp = await new_integration.get_attachment('30a47475-de26-4215-9459-b9094aa3b42e');
```

#### delete_attachment

```
let new_integration = new TestRail_API();
let resp = await new_integration.delete_attachment('30a47475-de26-4215-9459-b9094aa3b42e', {});
```

## Related Videos

-   https://youtube.com/live/q2NO23ruDqI?feature=share
-   https://youtube.com/live/IC4hoYwzvDY?feature=share
-   https://youtube.com/live/o9yonQpeFg4?feature=share
-   https://youtube.com/live/qjw5o0Kk6iQ?feature=share
-   https://youtube.com/live/XRJWPa8UW3M?feature=share
-   https://youtube.com/live/4y6EgblRqP0?feature=share
-   https://youtube.com/live/fTWMR7L6sCE?feature=share
-   https://youtube.com/live/XG9moLSdXuk?feature=share
-   https://youtube.com/live/bUy-FJYVz2M?feature=share

## Improvements & Suggestions

https://forms.gle/GZbS9hw42tSYJxKL7
