'use strict'; require('../tools/js/v3-models.js'); const assert = require('assert'); const TestServer = require('./resources/test-server.js'); const addBuilderForReport = require('./resources/common-operations.js').addBuilderForReport; const prepareServerTest = require('./resources/common-operations.js').prepareServerTest; describe("/privileged-api/update-run-status", function () { prepareServerTest(this); const reportWithRevision = [{ "buildTag": "124", "buildTime": "2013-02-28T15:34:51", "revisions": { "WebKit": { "revision": "191622", "timestamp": (new Date(1445945816878)).toISOString(), }, }, "builderName": "someBuilder", "builderPassword": "somePassword", "platform": "some platform", "tests": { "Suite": { "tests": { "test1": { "metrics": {"Time": { "current": [11] }} } } }, }}]; it("should be able to mark a run as an outlier", () => { const db = TestServer.database(); let id; return addBuilderForReport(reportWithRevision[0]).then(() => { return TestServer.remoteAPI().postJSON('/api/report/', reportWithRevision); }).then((response) => { assert.strictEqual(response['status'], 'OK'); return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['mean_cache'], 11); assert.strictEqual(runRows[0]['iteration_count_cache'], 1); assert.strictEqual(runRows[0]['marked_outlier'], false); id = runRows[0]['id']; return PrivilegedAPI.requestCSRFToken(); }).then(() => { return PrivilegedAPI.sendRequest('update-run-status', {'run': id, 'markedOutlier': true, 'token': PrivilegedAPI._token}); }).then(() => { return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['mean_cache'], 11); assert.strictEqual(runRows[0]['iteration_count_cache'], 1); assert.strictEqual(runRows[0]['marked_outlier'], true); }); }); it("should reject when the token is not set in cookie", () => { const db = TestServer.database(); return addBuilderForReport(reportWithRevision[0]).then(() => { return TestServer.remoteAPI().postJSON('/api/report/', reportWithRevision); }).then((response) => { assert.strictEqual(response['status'], 'OK'); return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['marked_outlier'], false); return PrivilegedAPI.requestCSRFToken(); }).then(() => { RemoteAPI.clearCookies(); return RemoteAPI.postJSONWithStatus('/privileged-api/update-run-status', {token: PrivilegedAPI._token}); }).then(() => { assert(false, 'should never be reached'); }, (error) => { assert.strictEqual(error, 'InvalidToken'); }); }); it("should reject when the token in the request content is bad", () => { return addBuilderForReport(reportWithRevision[0]).then(() => { return TestServer.remoteAPI().postJSON('/api/report/', reportWithRevision); }).then((response) => { assert.strictEqual(response['status'], 'OK'); return TestServer.database().selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['marked_outlier'], false); return PrivilegedAPI.requestCSRFToken(); }).then(() => { return RemoteAPI.postJSONWithStatus('/privileged-api/update-run-status', {token: 'bad'}); }).then(() => { assert(false, 'should never be reached'); }, (error) => { assert.strictEqual(error, 'InvalidToken'); }); }); it("should be able to unmark a run as an outlier", () => { const db = TestServer.database(); return addBuilderForReport(reportWithRevision[0]).then(() => { return TestServer.remoteAPI().postJSON('/api/report/', reportWithRevision); }).then((response) => { assert.strictEqual(response['status'], 'OK'); return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['marked_outlier'], false); return PrivilegedAPI.sendRequest('update-run-status', {'run': runRows[0]['id'], 'markedOutlier': true}); }).then(() => { return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['marked_outlier'], true); return PrivilegedAPI.sendRequest('update-run-status', {'run': runRows[0]['id'], 'markedOutlier': false}); }).then(() => { return db.selectAll('test_runs'); }).then((runRows) => { assert.strictEqual(runRows.length, 1); assert.strictEqual(runRows[0]['marked_outlier'], false); }); }); });