angles-javascript-client 1.0.47 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +32 -1
- package/dist/index.js +48 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/AnglesReporter.d.ts +12 -0
- package/dist/lib/AnglesReporter.js +12 -0
- package/dist/lib/AnglesReporter.js.map +1 -1
- package/dist/lib/models/Build.d.ts +3 -0
- package/dist/lib/models/Build.js.map +1 -1
- package/dist/lib/models/Execution.d.ts +12 -0
- package/dist/lib/models/Execution.js.map +1 -1
- package/dist/lib/models/Step.d.ts +2 -0
- package/dist/lib/models/Step.js.map +1 -1
- package/dist/lib/models/enum/CustomFieldScopes.d.ts +5 -0
- package/dist/lib/models/enum/CustomFieldScopes.js +10 -0
- package/dist/lib/models/enum/CustomFieldScopes.js.map +1 -0
- package/dist/lib/models/enum/CustomFieldTypes.d.ts +10 -0
- package/dist/lib/models/enum/CustomFieldTypes.js +15 -0
- package/dist/lib/models/enum/CustomFieldTypes.js.map +1 -0
- package/dist/lib/models/enum/ExecutionTypes.d.ts +4 -0
- package/dist/lib/models/enum/ExecutionTypes.js +9 -0
- package/dist/lib/models/enum/ExecutionTypes.js.map +1 -0
- package/dist/lib/models/enum/ManualCaseResultStates.d.ts +15 -0
- package/dist/lib/models/enum/ManualCaseResultStates.js +20 -0
- package/dist/lib/models/enum/ManualCaseResultStates.js.map +1 -0
- package/dist/lib/models/enum/ManualRunStates.d.ts +6 -0
- package/dist/lib/models/enum/ManualRunStates.js +11 -0
- package/dist/lib/models/enum/ManualRunStates.js.map +1 -0
- package/dist/lib/models/enum/ManualStepResultStates.d.ts +7 -0
- package/dist/lib/models/enum/ManualStepResultStates.js +12 -0
- package/dist/lib/models/enum/ManualStepResultStates.js.map +1 -0
- package/dist/lib/models/enum/ManualTestCasePriorities.d.ts +6 -0
- package/dist/lib/models/enum/ManualTestCasePriorities.js +11 -0
- package/dist/lib/models/enum/ManualTestCasePriorities.js.map +1 -0
- package/dist/lib/models/enum/ManualTestCaseStates.d.ts +5 -0
- package/dist/lib/models/enum/ManualTestCaseStates.js +10 -0
- package/dist/lib/models/enum/ManualTestCaseStates.js.map +1 -0
- package/dist/lib/models/manual/Attachment.d.ts +19 -0
- package/dist/lib/models/manual/Attachment.js +7 -0
- package/dist/lib/models/manual/Attachment.js.map +1 -0
- package/dist/lib/models/manual/CustomFieldDefinition.d.ts +21 -0
- package/dist/lib/models/manual/CustomFieldDefinition.js +7 -0
- package/dist/lib/models/manual/CustomFieldDefinition.js.map +1 -0
- package/dist/lib/models/manual/ManualChangeHistoryEntry.d.ts +24 -0
- package/dist/lib/models/manual/ManualChangeHistoryEntry.js +15 -0
- package/dist/lib/models/manual/ManualChangeHistoryEntry.js.map +1 -0
- package/dist/lib/models/manual/ManualFolder.d.ts +25 -0
- package/dist/lib/models/manual/ManualFolder.js +14 -0
- package/dist/lib/models/manual/ManualFolder.js.map +1 -0
- package/dist/lib/models/manual/ManualStep.d.ts +25 -0
- package/dist/lib/models/manual/ManualStep.js +16 -0
- package/dist/lib/models/manual/ManualStep.js.map +1 -0
- package/dist/lib/models/manual/ManualTestCase.d.ts +33 -0
- package/dist/lib/models/manual/ManualTestCase.js +11 -0
- package/dist/lib/models/manual/ManualTestCase.js.map +1 -0
- package/dist/lib/models/manual/ManualTestCaseVersion.d.ts +34 -0
- package/dist/lib/models/manual/ManualTestCaseVersion.js +15 -0
- package/dist/lib/models/manual/ManualTestCaseVersion.js.map +1 -0
- package/dist/lib/models/manual/ManualTestRun.d.ts +55 -0
- package/dist/lib/models/manual/ManualTestRun.js +17 -0
- package/dist/lib/models/manual/ManualTestRun.js.map +1 -0
- package/dist/lib/models/manual/SharedStep.d.ts +15 -0
- package/dist/lib/models/manual/SharedStep.js +8 -0
- package/dist/lib/models/manual/SharedStep.js.map +1 -0
- package/dist/lib/models/requests/CreateCustomField.d.ts +14 -0
- package/dist/lib/models/requests/CreateCustomField.js +7 -0
- package/dist/lib/models/requests/CreateCustomField.js.map +1 -0
- package/dist/lib/models/requests/CreateManualFolder.d.ts +7 -0
- package/dist/lib/models/requests/CreateManualFolder.js +7 -0
- package/dist/lib/models/requests/CreateManualFolder.js.map +1 -0
- package/dist/lib/models/requests/CreateManualTestCase.d.ts +29 -0
- package/dist/lib/models/requests/CreateManualTestCase.js +10 -0
- package/dist/lib/models/requests/CreateManualTestCase.js.map +1 -0
- package/dist/lib/models/requests/CreateManualTestRun.d.ts +15 -0
- package/dist/lib/models/requests/CreateManualTestRun.js +7 -0
- package/dist/lib/models/requests/CreateManualTestRun.js.map +1 -0
- package/dist/lib/models/requests/CreateSharedStep.d.ts +9 -0
- package/dist/lib/models/requests/CreateSharedStep.js +7 -0
- package/dist/lib/models/requests/CreateSharedStep.js.map +1 -0
- package/dist/lib/models/requests/MoveManualTestCases.d.ts +5 -0
- package/dist/lib/models/requests/MoveManualTestCases.js +7 -0
- package/dist/lib/models/requests/MoveManualTestCases.js.map +1 -0
- package/dist/lib/models/requests/RecordManualResult.d.ts +15 -0
- package/dist/lib/models/requests/RecordManualResult.js +10 -0
- package/dist/lib/models/requests/RecordManualResult.js.map +1 -0
- package/dist/lib/models/response/ManualResponses.d.ts +89 -0
- package/dist/lib/models/response/ManualResponses.js +48 -0
- package/dist/lib/models/response/ManualResponses.js.map +1 -0
- package/dist/lib/requests/AttachmentRequests.d.ts +39 -0
- package/dist/lib/requests/AttachmentRequests.js +66 -0
- package/dist/lib/requests/AttachmentRequests.js.map +1 -0
- package/dist/lib/requests/BuildRequests.d.ts +7 -2
- package/dist/lib/requests/BuildRequests.js +12 -2
- package/dist/lib/requests/BuildRequests.js.map +1 -1
- package/dist/lib/requests/CustomFieldRequests.d.ts +23 -0
- package/dist/lib/requests/CustomFieldRequests.js +41 -0
- package/dist/lib/requests/CustomFieldRequests.js.map +1 -0
- package/dist/lib/requests/ManualFolderRequests.d.ts +34 -0
- package/dist/lib/requests/ManualFolderRequests.js +47 -0
- package/dist/lib/requests/ManualFolderRequests.js.map +1 -0
- package/dist/lib/requests/ManualTestCaseRequests.d.ts +42 -0
- package/dist/lib/requests/ManualTestCaseRequests.js +74 -0
- package/dist/lib/requests/ManualTestCaseRequests.js.map +1 -0
- package/dist/lib/requests/ManualTestRunRequests.d.ts +36 -0
- package/dist/lib/requests/ManualTestRunRequests.js +64 -0
- package/dist/lib/requests/ManualTestRunRequests.js.map +1 -0
- package/dist/lib/requests/MetricRequests.d.ts +5 -1
- package/dist/lib/requests/MetricRequests.js +7 -1
- package/dist/lib/requests/MetricRequests.js.map +1 -1
- package/dist/lib/requests/SharedStepRequests.d.ts +24 -0
- package/dist/lib/requests/SharedStepRequests.js +52 -0
- package/dist/lib/requests/SharedStepRequests.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { BaseRequests } from './BaseRequests';
|
|
3
|
+
import { Attachment } from '../models/manual/Attachment';
|
|
4
|
+
import { AttachmentsResponse } from '../models/response/ManualResponses';
|
|
5
|
+
import { DefaultResponse } from '../models/response/DefaultResponse';
|
|
6
|
+
/** Exactly one owner must be supplied. */
|
|
7
|
+
export interface AttachmentOwner {
|
|
8
|
+
testCaseId?: string;
|
|
9
|
+
sharedStepId?: string;
|
|
10
|
+
executionId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class AttachmentRequests extends BaseRequests {
|
|
13
|
+
constructor(axiosInstance: AxiosInstance);
|
|
14
|
+
/**
|
|
15
|
+
* Uploads an image from the browser.
|
|
16
|
+
*
|
|
17
|
+
* Takes a File/Blob and builds a native FormData, unlike ScreenshotRequests.saveScreenshot
|
|
18
|
+
* which reads from disk with `fs` and is therefore Node-only. Attachments are captured by
|
|
19
|
+
* a QA in the browser, so that path is unusable here. The Content-Type header is
|
|
20
|
+
* deliberately not set: the browser has to add its own multipart boundary.
|
|
21
|
+
*/
|
|
22
|
+
uploadAttachment(file: Blob, owner: AttachmentOwner, fileName?: string): Promise<Attachment>;
|
|
23
|
+
getAttachments(owner: AttachmentOwner): Promise<AttachmentsResponse>;
|
|
24
|
+
getAttachment(attachmentId: string): Promise<Attachment>;
|
|
25
|
+
/**
|
|
26
|
+
* The URL of the full-size image. Returned rather than fetched so it can be used
|
|
27
|
+
* directly as an <img src>, which is how the markdown `attachment:<id>` references in a
|
|
28
|
+
* step's expected result are resolved.
|
|
29
|
+
*/
|
|
30
|
+
getAttachmentUrl(attachmentId: string): string;
|
|
31
|
+
/** The thumbnail URL. Falls back to the original server-side, so it never 404s. */
|
|
32
|
+
getThumbnailUrl(attachmentId: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Deletes an attachment. Rejected with 409 while any frozen test case version still
|
|
35
|
+
* references it - the file is the only copy of what that version's tester saw. Remove
|
|
36
|
+
* the image from the test case instead.
|
|
37
|
+
*/
|
|
38
|
+
deleteAttachment(attachmentId: string): Promise<DefaultResponse>;
|
|
39
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AttachmentRequests = void 0;
|
|
4
|
+
const BaseRequests_1 = require("./BaseRequests");
|
|
5
|
+
class AttachmentRequests extends BaseRequests_1.BaseRequests {
|
|
6
|
+
constructor(axiosInstance) {
|
|
7
|
+
super(axiosInstance);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Uploads an image from the browser.
|
|
11
|
+
*
|
|
12
|
+
* Takes a File/Blob and builds a native FormData, unlike ScreenshotRequests.saveScreenshot
|
|
13
|
+
* which reads from disk with `fs` and is therefore Node-only. Attachments are captured by
|
|
14
|
+
* a QA in the browser, so that path is unusable here. The Content-Type header is
|
|
15
|
+
* deliberately not set: the browser has to add its own multipart boundary.
|
|
16
|
+
*/
|
|
17
|
+
uploadAttachment(file, owner, fileName) {
|
|
18
|
+
const formData = new FormData();
|
|
19
|
+
if (owner.testCaseId)
|
|
20
|
+
formData.append('testCaseId', owner.testCaseId);
|
|
21
|
+
if (owner.sharedStepId)
|
|
22
|
+
formData.append('sharedStepId', owner.sharedStepId);
|
|
23
|
+
if (owner.executionId)
|
|
24
|
+
formData.append('executionId', owner.executionId);
|
|
25
|
+
if (fileName) {
|
|
26
|
+
formData.append('attachment', file, fileName);
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
formData.append('attachment', file);
|
|
30
|
+
}
|
|
31
|
+
return this.post('attachment', formData);
|
|
32
|
+
}
|
|
33
|
+
getAttachments(owner) {
|
|
34
|
+
const params = {};
|
|
35
|
+
if (owner.testCaseId)
|
|
36
|
+
params.testCaseId = owner.testCaseId;
|
|
37
|
+
if (owner.sharedStepId)
|
|
38
|
+
params.sharedStepId = owner.sharedStepId;
|
|
39
|
+
return this.get('attachment', { params });
|
|
40
|
+
}
|
|
41
|
+
getAttachment(attachmentId) {
|
|
42
|
+
return this.get(`attachment/${attachmentId}`);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The URL of the full-size image. Returned rather than fetched so it can be used
|
|
46
|
+
* directly as an <img src>, which is how the markdown `attachment:<id>` references in a
|
|
47
|
+
* step's expected result are resolved.
|
|
48
|
+
*/
|
|
49
|
+
getAttachmentUrl(attachmentId) {
|
|
50
|
+
return `${this.axios.defaults.baseURL || ''}attachment/${attachmentId}/file`;
|
|
51
|
+
}
|
|
52
|
+
/** The thumbnail URL. Falls back to the original server-side, so it never 404s. */
|
|
53
|
+
getThumbnailUrl(attachmentId) {
|
|
54
|
+
return `${this.axios.defaults.baseURL || ''}attachment/${attachmentId}/thumbnail`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Deletes an attachment. Rejected with 409 while any frozen test case version still
|
|
58
|
+
* references it - the file is the only copy of what that version's tester saw. Remove
|
|
59
|
+
* the image from the test case instead.
|
|
60
|
+
*/
|
|
61
|
+
deleteAttachment(attachmentId) {
|
|
62
|
+
return this.delete(`attachment/${attachmentId}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.AttachmentRequests = AttachmentRequests;
|
|
66
|
+
//# sourceMappingURL=AttachmentRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AttachmentRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/AttachmentRequests.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAY9C,MAAa,kBAAmB,SAAQ,2BAAY;IAElD,YAAmB,aAA4B;QAC7C,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;OAOG;IACI,gBAAgB,CAAC,IAAU,EAAE,KAAsB,EAAE,QAAiB;QAC3E,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,UAAU;YAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,KAAK,CAAC,YAAY;YAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5E,IAAI,KAAK,CAAC,WAAW;YAAE,QAAQ,CAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;SAC/C;aAAM;YACL,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;SACrC;QACD,OAAO,IAAI,CAAC,IAAI,CAAa,YAAY,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAEM,cAAc,CAAC,KAAsB;QAC1C,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,IAAI,KAAK,CAAC,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QAC3D,IAAI,KAAK,CAAC,YAAY;YAAE,MAAM,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACjE,OAAO,IAAI,CAAC,GAAG,CAAsB,YAAY,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjE,CAAC;IAEM,aAAa,CAAC,YAAoB;QACvC,OAAO,IAAI,CAAC,GAAG,CAAa,cAAc,YAAY,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,YAAoB;QAC1C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,cAAc,YAAY,OAAO,CAAC;IAC/E,CAAC;IAED,mFAAmF;IAC5E,eAAe,CAAC,YAAoB;QACzC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE,cAAc,YAAY,YAAY,CAAC;IACpF,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,YAAoB;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAkB,cAAc,YAAY,EAAE,CAAC,CAAC;IACpE,CAAC;CAEF;AA7DD,gDA6DC"}
|
|
@@ -6,6 +6,7 @@ import { Build } from '../models/Build';
|
|
|
6
6
|
import { Artifact } from '../models/Artifact';
|
|
7
7
|
import { BuildsResponse } from '../models/response/BuildsResponse';
|
|
8
8
|
import { DefaultResponse } from '../models/response/DefaultResponse';
|
|
9
|
+
import { ExecutionTypes } from '../models/enum/ExecutionTypes';
|
|
9
10
|
export declare class BuildRequests extends BaseRequests {
|
|
10
11
|
constructor(axiosInstance: AxiosInstance);
|
|
11
12
|
createBuild(request: CreateBuild): Promise<Build>;
|
|
@@ -18,8 +19,12 @@ export declare class BuildRequests extends BaseRequests {
|
|
|
18
19
|
* @param {boolean} [returnExecutionDetails=false]
|
|
19
20
|
*/
|
|
20
21
|
getBuilds(teamId: string, buildIds: string[], returnExecutionDetails: boolean): Promise<BuildsResponse>;
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* @param {ExecutionTypes=} executionType - narrow to automated or manual builds. Omit
|
|
24
|
+
* for both, preserving the behaviour every existing caller relies on.
|
|
25
|
+
*/
|
|
26
|
+
getBuildsWithFilters(teamId: string, filterEnvironments: string[], filterComponents: string[], skip: number, limit: number, executionType?: ExecutionTypes): Promise<BuildsResponse>;
|
|
27
|
+
getBuildsWithDateFilters(teamId: string, filterEnvironments: string[], filterComponents: string[], skip: number, limit: number, fromDate: Date, toDate: Date, executionType?: ExecutionTypes): Promise<BuildsResponse>;
|
|
23
28
|
/**
|
|
24
29
|
* This function will remove builds by age (including executions and screenshots).
|
|
25
30
|
* NOTE: this can not be reversed, once deleted all builds and assets will have been removed.
|
|
@@ -29,12 +29,19 @@ class BuildRequests extends BaseRequests_1.BaseRequests {
|
|
|
29
29
|
requestPath += `&returnExecutionDetails=${returnExecutionDetails}`;
|
|
30
30
|
return this.get(requestPath);
|
|
31
31
|
}
|
|
32
|
-
|
|
32
|
+
/**
|
|
33
|
+
* @param {ExecutionTypes=} executionType - narrow to automated or manual builds. Omit
|
|
34
|
+
* for both, preserving the behaviour every existing caller relies on.
|
|
35
|
+
*/
|
|
36
|
+
getBuildsWithFilters(teamId, filterEnvironments, filterComponents, skip, limit, executionType) {
|
|
33
37
|
let params = {
|
|
34
38
|
teamId,
|
|
35
39
|
skip,
|
|
36
40
|
limit,
|
|
37
41
|
};
|
|
42
|
+
if (executionType) {
|
|
43
|
+
params.executionType = executionType;
|
|
44
|
+
}
|
|
38
45
|
if (filterEnvironments && filterEnvironments.length > 0) {
|
|
39
46
|
params = Object.assign({ environmentIds: filterEnvironments.join(',') }, params);
|
|
40
47
|
}
|
|
@@ -45,7 +52,7 @@ class BuildRequests extends BaseRequests_1.BaseRequests {
|
|
|
45
52
|
params,
|
|
46
53
|
});
|
|
47
54
|
}
|
|
48
|
-
getBuildsWithDateFilters(teamId, filterEnvironments, filterComponents, skip, limit, fromDate, toDate) {
|
|
55
|
+
getBuildsWithDateFilters(teamId, filterEnvironments, filterComponents, skip, limit, fromDate, toDate, executionType) {
|
|
49
56
|
let params = {
|
|
50
57
|
teamId,
|
|
51
58
|
skip,
|
|
@@ -53,6 +60,9 @@ class BuildRequests extends BaseRequests_1.BaseRequests {
|
|
|
53
60
|
fromDate: moment_1.default(fromDate).format('YYYY-MM-DD'),
|
|
54
61
|
toDate: moment_1.default(toDate).format('YYYY-MM-DD'),
|
|
55
62
|
};
|
|
63
|
+
if (executionType) {
|
|
64
|
+
params.executionType = executionType;
|
|
65
|
+
}
|
|
56
66
|
if (filterEnvironments && filterEnvironments.length > 0) {
|
|
57
67
|
params = Object.assign({ environmentIds: filterEnvironments.join(',') }, params);
|
|
58
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/BuildRequests.ts"],"names":[],"mappings":";;;;;;AACA,iDAA8C;
|
|
1
|
+
{"version":3,"file":"BuildRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/BuildRequests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { BaseRequests } from './BaseRequests';
|
|
3
|
+
import { CustomFieldDefinition } from '../models/manual/CustomFieldDefinition';
|
|
4
|
+
import { CreateCustomField } from '../models/requests/CreateCustomField';
|
|
5
|
+
import { CustomFieldsResponse, CustomFieldDeleteResponse } from '../models/response/ManualResponses';
|
|
6
|
+
export declare class CustomFieldRequests extends BaseRequests {
|
|
7
|
+
constructor(axiosInstance: AxiosInstance);
|
|
8
|
+
/** Admin only. */
|
|
9
|
+
createCustomField(request: CreateCustomField): Promise<CustomFieldDefinition>;
|
|
10
|
+
/** Readable by any team member - the authoring form needs the definitions. */
|
|
11
|
+
getCustomFields(teamId: string, includeArchived?: boolean, appliesTo?: string): Promise<CustomFieldsResponse>;
|
|
12
|
+
getCustomField(fieldId: string): Promise<CustomFieldDefinition>;
|
|
13
|
+
/**
|
|
14
|
+
* Admin only. The key can never change; the type and in-use options cannot change while
|
|
15
|
+
* test cases hold values for them.
|
|
16
|
+
*/
|
|
17
|
+
updateCustomField(fieldId: string, request: Partial<CreateCustomField>): Promise<CustomFieldDefinition>;
|
|
18
|
+
/**
|
|
19
|
+
* Admin only. A field in use anywhere is archived rather than deleted, so historical
|
|
20
|
+
* values keep the label and type needed to render them - check `archived` on the result.
|
|
21
|
+
*/
|
|
22
|
+
deleteCustomField(fieldId: string): Promise<CustomFieldDeleteResponse>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CustomFieldRequests = void 0;
|
|
4
|
+
const BaseRequests_1 = require("./BaseRequests");
|
|
5
|
+
class CustomFieldRequests extends BaseRequests_1.BaseRequests {
|
|
6
|
+
constructor(axiosInstance) {
|
|
7
|
+
super(axiosInstance);
|
|
8
|
+
}
|
|
9
|
+
/** Admin only. */
|
|
10
|
+
createCustomField(request) {
|
|
11
|
+
return this.post('custom-field', request);
|
|
12
|
+
}
|
|
13
|
+
/** Readable by any team member - the authoring form needs the definitions. */
|
|
14
|
+
getCustomFields(teamId, includeArchived = false, appliesTo) {
|
|
15
|
+
const params = { teamId };
|
|
16
|
+
if (includeArchived)
|
|
17
|
+
params.includeArchived = true;
|
|
18
|
+
if (appliesTo)
|
|
19
|
+
params.appliesTo = appliesTo;
|
|
20
|
+
return this.get('custom-field', { params });
|
|
21
|
+
}
|
|
22
|
+
getCustomField(fieldId) {
|
|
23
|
+
return this.get(`custom-field/${fieldId}`);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Admin only. The key can never change; the type and in-use options cannot change while
|
|
27
|
+
* test cases hold values for them.
|
|
28
|
+
*/
|
|
29
|
+
updateCustomField(fieldId, request) {
|
|
30
|
+
return this.put(`custom-field/${fieldId}`, request);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Admin only. A field in use anywhere is archived rather than deleted, so historical
|
|
34
|
+
* values keep the label and type needed to render them - check `archived` on the result.
|
|
35
|
+
*/
|
|
36
|
+
deleteCustomField(fieldId) {
|
|
37
|
+
return this.delete(`custom-field/${fieldId}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.CustomFieldRequests = CustomFieldRequests;
|
|
41
|
+
//# sourceMappingURL=CustomFieldRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CustomFieldRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/CustomFieldRequests.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAQ9C,MAAa,mBAAoB,SAAQ,2BAAY;IAEnD,YAAmB,aAA4B;QAC7C,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAED,kBAAkB;IACX,iBAAiB,CAAC,OAA0B;QACjD,OAAO,IAAI,CAAC,IAAI,CAAwB,cAAc,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,8EAA8E;IACvE,eAAe,CAAC,MAAc,EAAE,kBAA2B,KAAK,EAAE,SAAkB;QACzF,MAAM,MAAM,GAAQ,EAAE,MAAM,EAAE,CAAC;QAC/B,IAAI,eAAe;YAAE,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC;QACnD,IAAI,SAAS;YAAE,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC;QAC5C,OAAO,IAAI,CAAC,GAAG,CAAuB,cAAc,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACpE,CAAC;IAEM,cAAc,CAAC,OAAe;QACnC,OAAO,IAAI,CAAC,GAAG,CAAwB,gBAAgB,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAe,EAAE,OAAmC;QAC3E,OAAO,IAAI,CAAC,GAAG,CAAwB,gBAAgB,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7E,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,OAAe;QACtC,OAAO,IAAI,CAAC,MAAM,CAA4B,gBAAgB,OAAO,EAAE,CAAC,CAAC;IAC3E,CAAC;CAEF;AAvCD,kDAuCC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { BaseRequests } from './BaseRequests';
|
|
3
|
+
import { ManualFolder } from '../models/manual/ManualFolder';
|
|
4
|
+
import { CreateManualFolder } from '../models/requests/CreateManualFolder';
|
|
5
|
+
import { MoveManualTestCases } from '../models/requests/MoveManualTestCases';
|
|
6
|
+
import { ManualFoldersResponse, MoveTestCasesResponse } from '../models/response/ManualResponses';
|
|
7
|
+
import { DefaultResponse } from '../models/response/DefaultResponse';
|
|
8
|
+
export declare class ManualFolderRequests extends BaseRequests {
|
|
9
|
+
constructor(axiosInstance: AxiosInstance);
|
|
10
|
+
createFolder(request: CreateManualFolder): Promise<ManualFolder>;
|
|
11
|
+
/**
|
|
12
|
+
* The team's whole folder tree, nested, with a test case count on each folder and a
|
|
13
|
+
* count of the cases that are not filed anywhere.
|
|
14
|
+
*/
|
|
15
|
+
getFolders(teamId: string): Promise<ManualFoldersResponse>;
|
|
16
|
+
getFolder(folderId: string): Promise<ManualFolder>;
|
|
17
|
+
/**
|
|
18
|
+
* Renames a folder and/or re-parents it. Moving takes the whole subtree along.
|
|
19
|
+
* Pass `parent: null` to move the folder to the team root.
|
|
20
|
+
*/
|
|
21
|
+
updateFolder(folderId: string, request: Partial<CreateManualFolder>): Promise<ManualFolder>;
|
|
22
|
+
/**
|
|
23
|
+
* Deletes an empty folder. Rejected with a 409 while it still holds test cases or
|
|
24
|
+
* sub-folders, so nothing is re-parented or removed by accident.
|
|
25
|
+
*/
|
|
26
|
+
deleteFolder(folderId: string): Promise<DefaultResponse>;
|
|
27
|
+
/**
|
|
28
|
+
* Files test cases into a folder, or back to the root with a null folder.
|
|
29
|
+
*
|
|
30
|
+
* Filing is organisation rather than content, so this does not create a new test case
|
|
31
|
+
* version - it is recorded in the change history instead.
|
|
32
|
+
*/
|
|
33
|
+
moveTestCases(request: MoveManualTestCases): Promise<MoveTestCasesResponse>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManualFolderRequests = void 0;
|
|
4
|
+
const BaseRequests_1 = require("./BaseRequests");
|
|
5
|
+
class ManualFolderRequests extends BaseRequests_1.BaseRequests {
|
|
6
|
+
constructor(axiosInstance) {
|
|
7
|
+
super(axiosInstance);
|
|
8
|
+
}
|
|
9
|
+
createFolder(request) {
|
|
10
|
+
return this.post('manual-folder', request);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* The team's whole folder tree, nested, with a test case count on each folder and a
|
|
14
|
+
* count of the cases that are not filed anywhere.
|
|
15
|
+
*/
|
|
16
|
+
getFolders(teamId) {
|
|
17
|
+
return this.get('manual-folder', { params: { teamId } });
|
|
18
|
+
}
|
|
19
|
+
getFolder(folderId) {
|
|
20
|
+
return this.get(`manual-folder/${folderId}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Renames a folder and/or re-parents it. Moving takes the whole subtree along.
|
|
24
|
+
* Pass `parent: null` to move the folder to the team root.
|
|
25
|
+
*/
|
|
26
|
+
updateFolder(folderId, request) {
|
|
27
|
+
return this.put(`manual-folder/${folderId}`, request);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Deletes an empty folder. Rejected with a 409 while it still holds test cases or
|
|
31
|
+
* sub-folders, so nothing is re-parented or removed by accident.
|
|
32
|
+
*/
|
|
33
|
+
deleteFolder(folderId) {
|
|
34
|
+
return this.delete(`manual-folder/${folderId}`);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Files test cases into a folder, or back to the root with a null folder.
|
|
38
|
+
*
|
|
39
|
+
* Filing is organisation rather than content, so this does not create a new test case
|
|
40
|
+
* version - it is recorded in the change history instead.
|
|
41
|
+
*/
|
|
42
|
+
moveTestCases(request) {
|
|
43
|
+
return this.put('manual-folder/move', request);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.ManualFolderRequests = ManualFolderRequests;
|
|
47
|
+
//# sourceMappingURL=ManualFolderRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualFolderRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/ManualFolderRequests.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAO9C,MAAa,oBAAqB,SAAQ,2BAAY;IAEpD,YAAmB,aAA4B;QAC7C,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAEM,YAAY,CAAC,OAA2B;QAC7C,OAAO,IAAI,CAAC,IAAI,CAAe,eAAe,EAAE,OAAO,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,MAAc;QAC9B,OAAO,IAAI,CAAC,GAAG,CAAwB,eAAe,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAClF,CAAC;IAEM,SAAS,CAAC,QAAgB;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAe,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,QAAgB,EAAE,OAAoC;QACxE,OAAO,IAAI,CAAC,GAAG,CAAe,iBAAiB,QAAQ,EAAE,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,MAAM,CAAkB,iBAAiB,QAAQ,EAAE,CAAC,CAAC;IACnE,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,OAA4B;QAC/C,OAAO,IAAI,CAAC,GAAG,CAAwB,oBAAoB,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF;AA/CD,oDA+CC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { BaseRequests } from './BaseRequests';
|
|
3
|
+
import { ManualTestCase } from '../models/manual/ManualTestCase';
|
|
4
|
+
import { ManualTestCaseVersion } from '../models/manual/ManualTestCaseVersion';
|
|
5
|
+
import { CreateManualTestCase } from '../models/requests/CreateManualTestCase';
|
|
6
|
+
import { ManualTestCasesResponse, ManualTestCaseVersionsResponse, ManualChangeHistoryResponse } from '../models/response/ManualResponses';
|
|
7
|
+
import { DefaultResponse } from '../models/response/DefaultResponse';
|
|
8
|
+
export interface ManualTestCaseFilters {
|
|
9
|
+
status?: string[];
|
|
10
|
+
priority?: string[];
|
|
11
|
+
tags?: string[];
|
|
12
|
+
search?: string;
|
|
13
|
+
/** A folder id, or the literal 'none' for cases that are not filed anywhere. */
|
|
14
|
+
folder?: string;
|
|
15
|
+
/** With a folder id, also return the cases in every sub-folder beneath it. */
|
|
16
|
+
includeSubFolders?: boolean;
|
|
17
|
+
limit?: number;
|
|
18
|
+
skip?: number;
|
|
19
|
+
}
|
|
20
|
+
export declare class ManualTestCaseRequests extends BaseRequests {
|
|
21
|
+
constructor(axiosInstance: AxiosInstance);
|
|
22
|
+
createTestCase(request: CreateManualTestCase): Promise<ManualTestCase>;
|
|
23
|
+
getTestCases(teamId: string, filters?: ManualTestCaseFilters): Promise<ManualTestCasesResponse>;
|
|
24
|
+
/**
|
|
25
|
+
* Retrieves the mutable head.
|
|
26
|
+
*
|
|
27
|
+
* @param {boolean} [expand=false] resolve shared-step placeholders into the steps a
|
|
28
|
+
* tester would actually follow. This is a preview of what the next frozen version will
|
|
29
|
+
* contain, not a substitute for reading a version.
|
|
30
|
+
*/
|
|
31
|
+
getTestCase(caseId: string, expand?: boolean): Promise<ManualTestCase>;
|
|
32
|
+
updateTestCase(caseId: string, request: Partial<CreateManualTestCase>): Promise<ManualTestCase>;
|
|
33
|
+
cloneTestCase(caseId: string, title?: string, comment?: string): Promise<ManualTestCase>;
|
|
34
|
+
deleteTestCase(caseId: string): Promise<DefaultResponse>;
|
|
35
|
+
getVersions(caseId: string): Promise<ManualTestCaseVersionsResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Retrieves the frozen content of one version - what an execution recorded against that
|
|
38
|
+
* version renders, unaffected by any later edit to the test case.
|
|
39
|
+
*/
|
|
40
|
+
getVersion(caseId: string, version: number): Promise<ManualTestCaseVersion>;
|
|
41
|
+
getHistory(caseId: string, limit?: number, skip?: number): Promise<ManualChangeHistoryResponse>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManualTestCaseRequests = void 0;
|
|
4
|
+
const BaseRequests_1 = require("./BaseRequests");
|
|
5
|
+
class ManualTestCaseRequests extends BaseRequests_1.BaseRequests {
|
|
6
|
+
constructor(axiosInstance) {
|
|
7
|
+
super(axiosInstance);
|
|
8
|
+
}
|
|
9
|
+
createTestCase(request) {
|
|
10
|
+
return this.post('manual-test-case', request);
|
|
11
|
+
}
|
|
12
|
+
getTestCases(teamId, filters = {}) {
|
|
13
|
+
const params = { teamId };
|
|
14
|
+
if (filters.status && filters.status.length > 0)
|
|
15
|
+
params.status = filters.status.join(',');
|
|
16
|
+
if (filters.priority && filters.priority.length > 0)
|
|
17
|
+
params.priority = filters.priority.join(',');
|
|
18
|
+
if (filters.tags && filters.tags.length > 0)
|
|
19
|
+
params.tags = filters.tags.join(',');
|
|
20
|
+
if (filters.search)
|
|
21
|
+
params.search = filters.search;
|
|
22
|
+
if (filters.folder)
|
|
23
|
+
params.folder = filters.folder;
|
|
24
|
+
if (filters.includeSubFolders)
|
|
25
|
+
params.includeSubFolders = true;
|
|
26
|
+
if (filters.limit !== undefined)
|
|
27
|
+
params.limit = filters.limit;
|
|
28
|
+
if (filters.skip !== undefined)
|
|
29
|
+
params.skip = filters.skip;
|
|
30
|
+
return this.get('manual-test-case', { params });
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Retrieves the mutable head.
|
|
34
|
+
*
|
|
35
|
+
* @param {boolean} [expand=false] resolve shared-step placeholders into the steps a
|
|
36
|
+
* tester would actually follow. This is a preview of what the next frozen version will
|
|
37
|
+
* contain, not a substitute for reading a version.
|
|
38
|
+
*/
|
|
39
|
+
getTestCase(caseId, expand = false) {
|
|
40
|
+
const params = {};
|
|
41
|
+
if (expand)
|
|
42
|
+
params.expand = true;
|
|
43
|
+
return this.get(`manual-test-case/${caseId}`, { params });
|
|
44
|
+
}
|
|
45
|
+
updateTestCase(caseId, request) {
|
|
46
|
+
return this.put(`manual-test-case/${caseId}`, request);
|
|
47
|
+
}
|
|
48
|
+
cloneTestCase(caseId, title, comment) {
|
|
49
|
+
return this.post(`manual-test-case/${caseId}/clone`, { title, comment });
|
|
50
|
+
}
|
|
51
|
+
deleteTestCase(caseId) {
|
|
52
|
+
return this.delete(`manual-test-case/${caseId}`);
|
|
53
|
+
}
|
|
54
|
+
getVersions(caseId) {
|
|
55
|
+
return this.get(`manual-test-case/${caseId}/version`);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Retrieves the frozen content of one version - what an execution recorded against that
|
|
59
|
+
* version renders, unaffected by any later edit to the test case.
|
|
60
|
+
*/
|
|
61
|
+
getVersion(caseId, version) {
|
|
62
|
+
return this.get(`manual-test-case/${caseId}/version/${version}`);
|
|
63
|
+
}
|
|
64
|
+
getHistory(caseId, limit, skip) {
|
|
65
|
+
const params = {};
|
|
66
|
+
if (limit !== undefined)
|
|
67
|
+
params.limit = limit;
|
|
68
|
+
if (skip !== undefined)
|
|
69
|
+
params.skip = skip;
|
|
70
|
+
return this.get(`manual-test-case/${caseId}/history`, { params });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
exports.ManualTestCaseRequests = ManualTestCaseRequests;
|
|
74
|
+
//# sourceMappingURL=ManualTestCaseRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualTestCaseRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/ManualTestCaseRequests.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { BaseRequests } from './BaseRequests';
|
|
3
|
+
import { ManualTestRun } from '../models/manual/ManualTestRun';
|
|
4
|
+
import { CreateManualTestRun } from '../models/requests/CreateManualTestRun';
|
|
5
|
+
import { RecordManualResult } from '../models/requests/RecordManualResult';
|
|
6
|
+
import { ManualRunStates } from '../models/enum/ManualRunStates';
|
|
7
|
+
import { ManualTestRunsResponse } from '../models/response/ManualResponses';
|
|
8
|
+
import { DefaultResponse } from '../models/response/DefaultResponse';
|
|
9
|
+
export declare class ManualTestRunRequests extends BaseRequests {
|
|
10
|
+
constructor(axiosInstance: AxiosInstance);
|
|
11
|
+
/**
|
|
12
|
+
* Creates the run and the manual-tagged build its results are written into. Each
|
|
13
|
+
* selected case is bound to its current frozen version.
|
|
14
|
+
*/
|
|
15
|
+
createTestRun(request: CreateManualTestRun): Promise<ManualTestRun>;
|
|
16
|
+
getTestRuns(teamId: string, status?: string[], assignedTo?: string, limit?: number, skip?: number): Promise<ManualTestRunsResponse>;
|
|
17
|
+
/**
|
|
18
|
+
* @param {boolean} [expand=false] include each case's bound frozen version - the steps
|
|
19
|
+
* the tester should follow. The execution view needs this; the list view does not.
|
|
20
|
+
*/
|
|
21
|
+
getTestRun(runId: string, expand?: boolean): Promise<ManualTestRun>;
|
|
22
|
+
updateTestRun(runId: string, request: Partial<CreateManualTestRun>): Promise<ManualTestRun>;
|
|
23
|
+
/**
|
|
24
|
+
* Records one case's result, writing a manual execution into the run's build so it
|
|
25
|
+
* counts on the dashboards. Re-recording updates that execution rather than adding one.
|
|
26
|
+
*/
|
|
27
|
+
recordResult(runId: string, caseId: string, request: RecordManualResult): Promise<ManualTestRun>;
|
|
28
|
+
/**
|
|
29
|
+
* Moves a not-yet-run case onto the latest version of its test case. Refused with a 409
|
|
30
|
+
* once a result exists - that would re-point an execution at content it never ran.
|
|
31
|
+
*/
|
|
32
|
+
rebindTestCase(runId: string, caseId: string): Promise<ManualTestRun>;
|
|
33
|
+
updateStatus(runId: string, status: ManualRunStates): Promise<ManualTestRun>;
|
|
34
|
+
/** Removes the run along with its backing build and executions. Team lead access. */
|
|
35
|
+
deleteTestRun(runId: string): Promise<DefaultResponse>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManualTestRunRequests = void 0;
|
|
4
|
+
const BaseRequests_1 = require("./BaseRequests");
|
|
5
|
+
class ManualTestRunRequests extends BaseRequests_1.BaseRequests {
|
|
6
|
+
constructor(axiosInstance) {
|
|
7
|
+
super(axiosInstance);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates the run and the manual-tagged build its results are written into. Each
|
|
11
|
+
* selected case is bound to its current frozen version.
|
|
12
|
+
*/
|
|
13
|
+
createTestRun(request) {
|
|
14
|
+
return this.post('manual-test-run', request);
|
|
15
|
+
}
|
|
16
|
+
getTestRuns(teamId, status, assignedTo, limit, skip) {
|
|
17
|
+
const params = { teamId };
|
|
18
|
+
if (status && status.length > 0)
|
|
19
|
+
params.status = status.join(',');
|
|
20
|
+
if (assignedTo)
|
|
21
|
+
params.assignedTo = assignedTo;
|
|
22
|
+
if (limit !== undefined)
|
|
23
|
+
params.limit = limit;
|
|
24
|
+
if (skip !== undefined)
|
|
25
|
+
params.skip = skip;
|
|
26
|
+
return this.get('manual-test-run', { params });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* @param {boolean} [expand=false] include each case's bound frozen version - the steps
|
|
30
|
+
* the tester should follow. The execution view needs this; the list view does not.
|
|
31
|
+
*/
|
|
32
|
+
getTestRun(runId, expand = false) {
|
|
33
|
+
const params = {};
|
|
34
|
+
if (expand)
|
|
35
|
+
params.expand = true;
|
|
36
|
+
return this.get(`manual-test-run/${runId}`, { params });
|
|
37
|
+
}
|
|
38
|
+
updateTestRun(runId, request) {
|
|
39
|
+
return this.put(`manual-test-run/${runId}`, request);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Records one case's result, writing a manual execution into the run's build so it
|
|
43
|
+
* counts on the dashboards. Re-recording updates that execution rather than adding one.
|
|
44
|
+
*/
|
|
45
|
+
recordResult(runId, caseId, request) {
|
|
46
|
+
return this.put(`manual-test-run/${runId}/test-case/${caseId}/result`, request);
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Moves a not-yet-run case onto the latest version of its test case. Refused with a 409
|
|
50
|
+
* once a result exists - that would re-point an execution at content it never ran.
|
|
51
|
+
*/
|
|
52
|
+
rebindTestCase(runId, caseId) {
|
|
53
|
+
return this.put(`manual-test-run/${runId}/test-case/${caseId}/rebind`, {});
|
|
54
|
+
}
|
|
55
|
+
updateStatus(runId, status) {
|
|
56
|
+
return this.put(`manual-test-run/${runId}/status`, { status });
|
|
57
|
+
}
|
|
58
|
+
/** Removes the run along with its backing build and executions. Team lead access. */
|
|
59
|
+
deleteTestRun(runId) {
|
|
60
|
+
return this.delete(`manual-test-run/${runId}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.ManualTestRunRequests = ManualTestRunRequests;
|
|
64
|
+
//# sourceMappingURL=ManualTestRunRequests.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ManualTestRunRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/ManualTestRunRequests.ts"],"names":[],"mappings":";;;AACA,iDAA8C;AAQ9C,MAAa,qBAAsB,SAAQ,2BAAY;IAErD,YAAmB,aAA4B;QAC7C,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,OAA4B;QAC/C,OAAO,IAAI,CAAC,IAAI,CAAgB,iBAAiB,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAEM,WAAW,CAAC,MAAc,EAAE,MAAiB,EAAE,UAAmB,EAAE,KAAc,EAAE,IAAa;QACtG,MAAM,MAAM,GAAQ,EAAE,MAAM,EAAE,CAAC;QAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClE,IAAI,UAAU;YAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/C,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QAC9C,IAAI,IAAI,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAyB,iBAAiB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,KAAa,EAAE,SAAkB,KAAK;QACtD,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,IAAI,MAAM;YAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QACjC,OAAO,IAAI,CAAC,GAAG,CAAgB,mBAAmB,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAEM,aAAa,CAAC,KAAa,EAAE,OAAqC;QACvE,OAAO,IAAI,CAAC,GAAG,CAAgB,mBAAmB,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IACtE,CAAC;IAED;;;OAGG;IACI,YAAY,CAAC,KAAa,EAAE,MAAc,EAAE,OAA2B;QAC5E,OAAO,IAAI,CAAC,GAAG,CAAgB,mBAAmB,KAAK,cAAc,MAAM,SAAS,EAAE,OAAO,CAAC,CAAC;IACjG,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,KAAa,EAAE,MAAc;QACjD,OAAO,IAAI,CAAC,GAAG,CAAgB,mBAAmB,KAAK,cAAc,MAAM,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5F,CAAC;IAEM,YAAY,CAAC,KAAa,EAAE,MAAuB;QACxD,OAAO,IAAI,CAAC,GAAG,CAAgB,mBAAmB,KAAK,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,qFAAqF;IAC9E,aAAa,CAAC,KAAa;QAChC,OAAO,IAAI,CAAC,MAAM,CAAkB,mBAAmB,KAAK,EAAE,CAAC,CAAC;IAClE,CAAC;CAEF;AA9DD,sDA8DC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AxiosInstance } from 'axios';
|
|
2
2
|
import { BaseRequests } from './BaseRequests';
|
|
3
3
|
import { GroupingPeriods } from "../models/enum/GroupingPeriods";
|
|
4
|
+
import { ExecutionTypes } from '../models/enum/ExecutionTypes';
|
|
4
5
|
import { PhaseMetrics } from "../models/response/PhaseMetrics";
|
|
5
6
|
import { ScreenshotMetrics } from "../models/response/ScreenshotMetrics";
|
|
6
7
|
export declare class MetricRequests extends BaseRequests {
|
|
@@ -13,8 +14,11 @@ export declare class MetricRequests extends BaseRequests {
|
|
|
13
14
|
* @param fromDate
|
|
14
15
|
* @param toDate
|
|
15
16
|
* @param groupingPeriod
|
|
17
|
+
* @param {ExecutionTypes=} executionType - narrow to automated or manual results.
|
|
18
|
+
* Omit for both, which is what every caller saw before manual runs existed. Each period
|
|
19
|
+
* also carries an executionTypeBreakdown regardless, for stacking the two.
|
|
16
20
|
*/
|
|
17
|
-
getPhaseMetrics(teamId: string, componentId: string, fromDate: Date, toDate: Date, groupingPeriod: GroupingPeriods): Promise<PhaseMetrics>;
|
|
21
|
+
getPhaseMetrics(teamId: string, componentId: string, fromDate: Date, toDate: Date, groupingPeriod: GroupingPeriods, executionType?: ExecutionTypes): Promise<PhaseMetrics>;
|
|
18
22
|
/**
|
|
19
23
|
* Will retrieve screenshot metrics grouped by tags and views.
|
|
20
24
|
*
|
|
@@ -18,8 +18,11 @@ class MetricRequests extends BaseRequests_1.BaseRequests {
|
|
|
18
18
|
* @param fromDate
|
|
19
19
|
* @param toDate
|
|
20
20
|
* @param groupingPeriod
|
|
21
|
+
* @param {ExecutionTypes=} executionType - narrow to automated or manual results.
|
|
22
|
+
* Omit for both, which is what every caller saw before manual runs existed. Each period
|
|
23
|
+
* also carries an executionTypeBreakdown regardless, for stacking the two.
|
|
21
24
|
*/
|
|
22
|
-
getPhaseMetrics(teamId, componentId, fromDate, toDate, groupingPeriod) {
|
|
25
|
+
getPhaseMetrics(teamId, componentId, fromDate, toDate, groupingPeriod, executionType) {
|
|
23
26
|
const url = new URL(this.axios.defaults.baseURL + `/metrics/phase?teamId=${teamId}`);
|
|
24
27
|
if (componentId) {
|
|
25
28
|
url.searchParams.append('componentId', componentId);
|
|
@@ -33,6 +36,9 @@ class MetricRequests extends BaseRequests_1.BaseRequests {
|
|
|
33
36
|
if (groupingPeriod) {
|
|
34
37
|
url.searchParams.append('groupingPeriod', groupingPeriod);
|
|
35
38
|
}
|
|
39
|
+
if (executionType) {
|
|
40
|
+
url.searchParams.append('executionType', executionType);
|
|
41
|
+
}
|
|
36
42
|
return this.get(url.toString());
|
|
37
43
|
}
|
|
38
44
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MetricRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/MetricRequests.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAC5B,iDAA8C;
|
|
1
|
+
{"version":3,"file":"MetricRequests.js","sourceRoot":"","sources":["../../../src/lib/requests/MetricRequests.ts"],"names":[],"mappings":";;;;;;AACA,oDAA4B;AAC5B,iDAA8C;AAM9C,MAAa,cAAe,SAAQ,2BAAY;IAE9C,YAAmB,aAA4B;QAC7C,KAAK,CAAC,aAAa,CAAC,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,eAAe,CAAC,MAAc,EAAE,WAAmB,EAAE,QAAc,EAAE,MAAY,EAAE,cAA+B,EAAE,aAA8B;QACvJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,yBAAyB,MAAM,EAAE,CAAC,CAAC;QACrF,IAAI,WAAW,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;SAAE;QACzE,IAAI,QAAQ,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;SAAE;QAC7F,IAAI,MAAM,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,gBAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;SAAE;QACvF,IAAI,cAAc,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAgB,EAAE,cAAc,CAAC,CAAC;SAAE;QAClF,IAAI,aAAa,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;SAAE;QAC/E,OAAO,IAAI,CAAC,GAAG,CAAe,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChD,CAAC;IAED;;;;;;;OAOG;IACI,oBAAoB,CAAC,IAAY,EAAE,GAAW,EAAE,KAAa,EAAE,SAAkB;QACtF,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,GAAG,sBAAsB,CAAC,CAAC;QAC1E,IAAI,IAAI,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SAAE;QACpD,IAAI,GAAG,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;SAAE;QACjD,IAAI,KAAK,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;SAAE;QAC/D,IAAI,SAAS,EAAE;YAAE,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;SAAE;QAC3E,OAAO,IAAI,CAAC,GAAG,CAAoB,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACrD,CAAC;CACF;AA5CD,wCA4CC"}
|