diff --git a/.talismanrc b/.talismanrc index ccaba411..6d3f969f 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,5 +1,5 @@ threshold: medium fileignoreconfig: - filename: package-lock.json - checksum: 2a2327aabd3f6eacf41a8e8bb3dd5afdab892683cfd15aac308f43c14108b824 + checksum: 9d0340f9359927d477fe8ab4650642c068c592be63fb817651d866849e0dbbc2 version: "" \ No newline at end of file diff --git a/lib/organization/teams/teamUsers/index.js b/lib/organization/teams/teamUsers/index.js index 3f88438d..ff0636d9 100644 --- a/lib/organization/teams/teamUsers/index.js +++ b/lib/organization/teams/teamUsers/index.js @@ -64,9 +64,9 @@ export function TeamUsers (http, data) { } } export function UsersCollection (http, data) { - const obj = cloneDeep(data.teamUsers) || [] - const usersCollection = obj.map((user) => { - return new TeamUsers(http, { userId: user }) + const obj = cloneDeep(data.users) || [] + const usersCollection = obj.map((userId) => { + return new TeamUsers(http, { userId }) }) return usersCollection } diff --git a/lib/stack/taxonomy/index.js b/lib/stack/taxonomy/index.js index ccac2296..b2b83b4c 100644 --- a/lib/stack/taxonomy/index.js +++ b/lib/stack/taxonomy/index.js @@ -87,10 +87,11 @@ export function Taxonomy (http, data = {}) { * .then((taxonomy) => console.log(taxonomy)) * */ - this.export = async () => { + this.export = async (params = {}) => { try { const headers = { - headers: { ...cloneDeep(this.stackHeaders) } + headers: { ...cloneDeep(this.stackHeaders) }, + params } const response = await http.get(`${this.urlPath}/export`, headers) if (response.data) { @@ -103,7 +104,6 @@ export function Taxonomy (http, data = {}) { } } - this.terms = (uid = '') => { const data = { stackHeaders: this.stackHeaders } data.taxonomy_uid = this.uid @@ -183,7 +183,6 @@ export function Taxonomy (http, data = {}) { throw error(err) } } - } } export function TaxonomyCollection (http, data) { @@ -201,4 +200,4 @@ export function createFormData (data) { formData.append('taxonomy', uploadStream) return formData } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index e723019e..b02fe8b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/management", - "version": "1.14.1", + "version": "1.15.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@contentstack/management", - "version": "1.14.1", + "version": "1.15.2", "license": "MIT", "dependencies": { "@slack/bolt": "^3.17.0", @@ -2911,15 +2911,15 @@ "dev": true }, "node_modules/@slack/bolt": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.0.tgz", - "integrity": "sha512-gxZygJj/wnrrSPCAlXO4D5FIYre2McPC+Vwrkq6CS74S4MI+0/gRvdUUXMHoF+oSGfsGs3ul6Fk+Bc/EE7Waig==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", + "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", "dependencies": { "@slack/logger": "^4.0.0", - "@slack/oauth": "^2.6.1", - "@slack/socket-mode": "^1.3.2", + "@slack/oauth": "^2.6.2", + "@slack/socket-mode": "^1.3.3", "@slack/types": "^2.11.0", - "@slack/web-api": "^6.11.0", + "@slack/web-api": "^6.11.2", "@types/express": "^4.16.1", "@types/promise.allsettled": "^1.0.3", "@types/tsscmp": "^1.0.0", @@ -3025,9 +3025,9 @@ } }, "node_modules/@slack/web-api": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.11.2.tgz", - "integrity": "sha512-s4qCQGXasr8jpCf/+6+V/smq+Z2RX7EIBnJeO/xe7Luie1nyBihFMgjICNyvzWoWBdaGntSnn5CcZdFm4ItBWg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", + "integrity": "sha512-RPw6F8rWfGveGkZEJ4+4jUin5iazxRK2q3FpQDz/FvdgzC3nZmPyLx8WRzc6nh0w3MBjEbphNnp2VZksfhpBIQ==", "dependencies": { "@slack/logger": "^3.0.0", "@slack/types": "^2.11.0", @@ -3201,9 +3201,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "4.17.42", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz", + "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -15770,15 +15770,15 @@ "dev": true }, "@slack/bolt": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.0.tgz", - "integrity": "sha512-gxZygJj/wnrrSPCAlXO4D5FIYre2McPC+Vwrkq6CS74S4MI+0/gRvdUUXMHoF+oSGfsGs3ul6Fk+Bc/EE7Waig==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/@slack/bolt/-/bolt-3.17.1.tgz", + "integrity": "sha512-N+4WxpkM59RXi7BL3IXUtENnn9cF7TOBn7ttaHpgvlnjUaro+yQyY60arXTlP4ytVDFJ1w0mSdfftcM17h+i2w==", "requires": { "@slack/logger": "^4.0.0", - "@slack/oauth": "^2.6.1", - "@slack/socket-mode": "^1.3.2", + "@slack/oauth": "^2.6.2", + "@slack/socket-mode": "^1.3.3", "@slack/types": "^2.11.0", - "@slack/web-api": "^6.11.0", + "@slack/web-api": "^6.11.2", "@types/express": "^4.16.1", "@types/promise.allsettled": "^1.0.3", "@types/tsscmp": "^1.0.0", @@ -15862,9 +15862,9 @@ "integrity": "sha512-UlIrDWvuLaDly3QZhCPnwUSI/KYmV1N9LyhuH6EDKCRS1HWZhyTG3Ja46T3D0rYfqdltKYFXbJSSRPwZpwO0cQ==" }, "@slack/web-api": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.11.2.tgz", - "integrity": "sha512-s4qCQGXasr8jpCf/+6+V/smq+Z2RX7EIBnJeO/xe7Luie1nyBihFMgjICNyvzWoWBdaGntSnn5CcZdFm4ItBWg==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/@slack/web-api/-/web-api-6.12.0.tgz", + "integrity": "sha512-RPw6F8rWfGveGkZEJ4+4jUin5iazxRK2q3FpQDz/FvdgzC3nZmPyLx8WRzc6nh0w3MBjEbphNnp2VZksfhpBIQ==", "requires": { "@slack/logger": "^3.0.0", "@slack/types": "^2.11.0", @@ -16022,9 +16022,9 @@ } }, "@types/express-serve-static-core": { - "version": "4.17.41", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", - "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "version": "4.17.42", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.42.tgz", + "integrity": "sha512-ckM3jm2bf/MfB3+spLPWYPUH573plBFwpOhqQ2WottxYV85j1HQFlxmnTq57X1yHY9awZPig06hL/cLMgNWHIQ==", "requires": { "@types/node": "*", "@types/qs": "*", diff --git a/package.json b/package.json index ec1c5e7f..7681b86a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/management", - "version": "1.15.1", + "version": "1.15.2", "description": "The Content Management API is used to manage the content of your Contentstack account", "main": "./dist/node/contentstack-management.js", "browser": "./dist/web/contentstack-management.js", diff --git a/test/api/taxonomy-test.js b/test/api/taxonomy-test.js index b8e331a6..e31c715b 100644 --- a/test/api/taxonomy-test.js +++ b/test/api/taxonomy-test.js @@ -39,7 +39,7 @@ describe('taxonomy api Test', () => { makeTaxonomy() .import(importTaxonomy) .then((taxonomyResponse) => { - expect(taxonomyResponse.name).to.be.equal("name") + expect(taxonomyResponse.name).to.be.equal('name') done() }) .catch(done) @@ -47,7 +47,7 @@ describe('taxonomy api Test', () => { it('Export taxonomy', done => { makeTaxonomy(taxonomyUID) - .export() + .export({}) .then((taxonomyResponse) => { expect(taxonomyResponse.uid).to.be.equal(taxonomyUID) expect(taxonomyResponse.name).to.be.not.equal(null) diff --git a/test/sanity-check/api/managementToken-test.js b/test/sanity-check/api/managementToken-test.js new file mode 100644 index 00000000..b676b195 --- /dev/null +++ b/test/sanity-check/api/managementToken-test.js @@ -0,0 +1,146 @@ +import { expect } from 'chai' +import { describe, it, setup } from 'mocha' +import { jsonReader } from '../utility/fileOperations/readwrite.js' +import { createManagementToken, createManagementToken2 } from '../mock/managementToken.js' +import { contentstackClient } from '../utility/ContentstackClient.js' + +let client = {} + +let tokenUidProd = '' +let tokenUidDev = '' +describe('Management Token api Test', () => { + setup(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + + it('should add a Management Token', done => { + makeManagementToken() + .create(createManagementToken) + .then((token) => { + tokenUidDev = token.uid + expect(token.name).to.be.equal(createManagementToken.token.name) + expect(token.description).to.be.equal(createManagementToken.token.description) + expect(token.scope[0].module).to.be.equal(createManagementToken.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should add a Management Token for production', done => { + makeManagementToken() + .create(createManagementToken2) + .then((token) => { + tokenUidProd = token.uid + expect(token.name).to.be.equal(createManagementToken2.token.name) + expect(token.description).to.be.equal(createManagementToken2.token.description) + expect(token.scope[0].module).to.be.equal(createManagementToken2.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should get a Management Token from uid', done => { + makeManagementToken(tokenUidProd) + .fetch() + .then((token) => { + expect(token.name).to.be.equal(createManagementToken2.token.name) + expect(token.description).to.be.equal(createManagementToken2.token.description) + expect(token.scope[0].module).to.be.equal(createManagementToken2.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should query to get all Management Token', done => { + makeManagementToken() + .query() + .find() + .then((tokens) => { + tokens.items.forEach((token) => { + expect(token.name).to.be.not.equal(null) + expect(token.description).to.be.not.equal(null) + expect(token.scope[0].module).to.be.not.equal(null) + expect(token.uid).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) + + it('should query to get a Management Token from name', done => { + makeManagementToken() + .query({ query: { name: createManagementToken.token.name } }) + .find() + .then((tokens) => { + tokens.items.forEach((token) => { + expect(token.name).to.be.equal(createManagementToken.token.name) + expect(token.description).to.be.equal(createManagementToken.token.description) + expect(token.scope[0].module).to.be.equal(createManagementToken.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) + + it('should fetch and update a Management Token from uid', done => { + makeManagementToken(tokenUidProd) + .fetch() + .then((token) => { + token.name = 'Update Production Name' + token.description = 'Update Production description' + token.scope = createManagementToken2.token.scope + return token.update() + }) + .then((token) => { + expect(token.name).to.be.equal('Update Production Name') + expect(token.description).to.be.equal('Update Production description') + expect(token.scope[0].module).to.be.equal(createManagementToken2.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should update a Management Token from uid', done => { + const token = makeManagementToken(tokenUidProd) + Object.assign(token, createManagementToken2.token) + token.update() + .then((token) => { + expect(token.name).to.be.equal(createManagementToken2.token.name) + expect(token.description).to.be.equal(createManagementToken2.token.description) + expect(token.scope[0].module).to.be.equal(createManagementToken2.token.scope[0].module) + expect(token.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should delete a Management Token from uid', done => { + makeManagementToken(tokenUidProd) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('Management Token deleted successfully.') + done() + }) + .catch(done) + }) + + it('should delete a Management Token from uid 2', done => { + makeManagementToken(tokenUidDev) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('Management Token deleted successfully.') + done() + }) + .catch(done) + }) +}) + +function makeManagementToken (uid = null) { + return client.stack({ api_key: process.env.API_KEY }).managementToken(uid) +} diff --git a/test/sanity-check/api/organization-test.js b/test/sanity-check/api/organization-test.js index 7e1f2b8f..da25c4b9 100644 --- a/test/sanity-check/api/organization-test.js +++ b/test/sanity-check/api/organization-test.js @@ -1,6 +1,6 @@ import { expect } from 'chai' import { describe, it, setup } from 'mocha' -import { jsonReader } from '../utility/fileOperations/readwrite' +import { jsonReader, jsonWrite } from '../utility/fileOperations/readwrite' import { contentstackClient } from '../utility/ContentstackClient' var user = {} @@ -79,6 +79,7 @@ describe('Organization api test', () => { organization.roles() .then((roles) => { for (const i in roles.items) { + jsonWrite(roles.items, 'orgRoles.json') expect(roles.items[i].uid).to.not.equal(null, 'Role uid cannot be null') expect(roles.items[i].name).to.not.equal(null, 'Role name cannot be null') expect(roles.items[i].org_uid).to.be.equal(organization.uid, 'Role org_uid not match') @@ -102,7 +103,4 @@ describe('Organization api test', () => { }) .catch(done) }) - - // addUser - // Resend invitation }) diff --git a/test/sanity-check/api/release-test.js b/test/sanity-check/api/release-test.js new file mode 100644 index 00000000..20c9c822 --- /dev/null +++ b/test/sanity-check/api/release-test.js @@ -0,0 +1,239 @@ +import { describe, it, setup } from 'mocha' +import { jsonReader } from '../utility/fileOperations/readwrite.js' +import { releaseCreate } from '../mock/release.js' +import { expect } from 'chai' +import { cloneDeep } from 'lodash' +import { contentstackClient } from '../utility/ContentstackClient.js' +import { multiPageCT } from '../mock/content-type.js' +import dotenv from 'dotenv' + +dotenv.config() +let client = {} +let releaseUID = '' +let releaseUID2 = '' +let entries = {} +const itemToDelete = {} + +describe('Relases api Test', () => { + setup(() => { + const user = jsonReader('loggedinuser.json') + entries = jsonReader('entry.json') + client = contentstackClient(user.authtoken) + }) + + it('should create a Release', done => { + makeRelease() + .create(releaseCreate) + .then((release) => { + releaseUID = release.uid + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should fetch a Release from Uid', done => { + makeRelease(releaseUID) + .fetch() + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.equal(releaseUID) + done() + }) + .catch(done) + }) + + it('should create release item', done => { + const item = { + version: entries[0]._version, + uid: entries[0].uid, + content_type_uid: multiPageCT.content_type.uid, + action: 'publish', + locale: 'en-us' + } + makeRelease(releaseUID) + .item() + .create({ item }) + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.equal(releaseUID) + expect(release.items.length).to.be.equal(1) + done() + }) + .catch(done) + }) + + it('should create release items', done => { + const items = [ + { + version: entries[1]._version, + uid: entries[1].uid, + content_type_uid: multiPageCT.content_type.uid, + action: 'publish', + locale: 'en-us' + }, + { + version: entries[2]._version, + uid: entries[2].uid, + content_type_uid: multiPageCT.content_type.uid, + action: 'publish', + locale: 'en-us' + } + ] + makeRelease(releaseUID) + .item() + .create({ items }) + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.equal(releaseUID) + expect(release.items.length).to.be.equal(3) + done() + }) + .catch(done) + }) + + it('should fetch a Release items from Uid', done => { + makeRelease(releaseUID) + .item() + .findAll() + .then((collection) => { + const itemdelete = collection.items[0] + itemToDelete['version'] = itemdelete.version + itemToDelete.action = itemdelete.action + itemToDelete.uid = itemdelete.uid + itemToDelete.locale = itemdelete.locale + itemToDelete.content_type_uid = itemdelete.content_type_uid + expect(collection.items.length).to.be.equal(3) + done() + }) + .catch(done) + }) + + it('should delete specific item', done => { + makeRelease(releaseUID) + .item() + .delete({ items: [itemToDelete] }) + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.equal(releaseUID) + expect(release.items.length).to.be.equal(2) + done() + }) + .catch(done) + }) + + it('should delete all items', done => { + makeRelease(releaseUID) + .item() + .delete() + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.equal(releaseUID) + expect(release.items.length).to.be.equal(0) + done() + }) + .catch(done) + }) + + it('should fetch and Update a Release from Uid', done => { + makeRelease(releaseUID) + .fetch() + .then((release) => { + release.name = 'Update release name' + return release.update() + }) + .then((release) => { + expect(release.name).to.be.equal('Update release name') + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should update a Release from Uid', done => { + const relaseObject = makeRelease(releaseUID) + Object.assign(relaseObject, cloneDeep(releaseCreate.release)) + relaseObject + .update() + .then((release) => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.description).to.be.equal(releaseCreate.release.description) + expect(release.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should get all Releases', done => { + makeRelease() + .query() + .find() + .then((releaseCollection) => { + releaseCollection.items.forEach(release => { + expect(release.name).to.be.not.equal(null) + expect(release.uid).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) + + it('should get specific Releases with name ', done => { + makeRelease() + .query({ query: { name: releaseCreate.release.name } }) + .find() + .then((releaseCollection) => { + releaseCollection.items.forEach(release => { + expect(release.name).to.be.equal(releaseCreate.release.name) + expect(release.uid).to.be.not.equal(null) + }) + done() + }) + .catch(done) + }) + + it('should clone specific Releases with Uid ', done => { + makeRelease(releaseUID) + .clone({ name: 'New Clone Name', description: 'New Desc' }) + .then((release) => { + releaseUID2 = release.uid + expect(release.name).to.be.equal('New Clone Name') + expect(release.description).to.be.equal('New Desc') + expect(release.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should delete specific Releases with Uid ', done => { + makeRelease(releaseUID) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('Release deleted successfully.') + done() + }) + .catch(done) + }) + + it('should delete cloned Release with Uid', done => { + makeRelease(releaseUID2) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('Release deleted successfully.') + done() + }) + .catch(done) + }) +}) + +function makeRelease (uid = null) { + return client.stack({ api_key: process.env.API_KEY }).release(uid) +} diff --git a/test/sanity-check/api/role-test.js b/test/sanity-check/api/role-test.js new file mode 100644 index 00000000..d1a190c1 --- /dev/null +++ b/test/sanity-check/api/role-test.js @@ -0,0 +1,148 @@ +import { expect } from 'chai' +import { describe, it, setup } from 'mocha' +import role from '../mock/role.js' +import { jsonReader, jsonWrite } from '../utility/fileOperations/readwrite' +import { contentstackClient } from '../utility/ContentstackClient.js' +import dotenv from 'dotenv' + +dotenv.config() +let client = {} +let roleUID = '' + +describe('Role api test', () => { + setup(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + + it('should get all role in stack', done => { + getRole() + .fetchAll() + .then((roles) => { + jsonWrite(roles.items, 'roles.json') + for (const index in roles.items) { + const role1 = roles.items[index] + expect(role1.uid).to.not.equal(null, 'Role uid cannot be null') + } + done() + }) + .catch(done) + }) + + it('should get 1 role in stack with limit', done => { + getRole() + .fetchAll({ limit: 2 }) + .then((roles) => { + expect(roles.items.length).to.not.equal(1) + done() + }) + .catch(done) + }) + + it('should get role in stack with skip first', done => { + getRole() + .fetchAll({ skip: 1 }) + .then((roles) => { + expect(roles.items.lenth).to.not.equal(1, 'Role fetch with limit 1 not work') + done() + }) + .catch(done) + }) + + it('should create new role in stack', done => { + getRole() + .create(role) + .then((roles) => { + roleUID = roles.uid + expect(roles.name).to.be.equal(role.role.name, 'Role name not match') + expect(roles.description).to.be.equal(role.role.description, 'Role description not match') + done() + }) + .catch(done) + }) + + it('should get role in stack', done => { + getRole(roleUID) + .fetch() + .then((roles) => { + jsonWrite(roles, 'role.json') + expect(roles.name).to.be.equal(role.role.name, 'Role name not match') + expect(roles.description).to.be.equal(role.role.description, 'Role description not match') + expect(roles.stack.api_key).to.be.equal(process.env.API_KEY, 'Role stack uid not match') + done() + }) + .catch(done) + }) + + it('should update role in stack', done => { + getRole(roleUID) + .fetch({ include_rules: true, include_permissions: true }) + .then((roles) => { + roles.name = 'Update test name' + roles.description = 'Update description' + return roles.update() + }) + .then((roles) => { + expect(roles.name).to.be.equal('Update test name', 'Role name not match') + expect(roles.description).to.be.equal('Update description', 'Role description not match') + done() + }) + .catch(done) + }) + + it('should get all Roles with query', done => { + getRole() + .query() + .find() + .then((response) => { + for (const index in response.items) { + const role = response.items[index] + expect(role.name).to.not.equal(null) + expect(role.uid).to.not.equal(null) + } + done() + }) + .catch(done) + }) + + it('should get query Role', done => { + getRole() + .query({ query: { name: 'Developer' } }) + .find() + .then((response) => { + for (const index in response.items) { + const stack = response.items[index] + expect(stack.name).to.be.equal('Developer') + } + done() + }) + .catch(done) + }) + + it('should find one role', done => { + getRole() + .query({ name: 'Developer' }) + .findOne() + .then((response) => { + const stack = response.items[0] + expect(response.items.length).to.be.equal(1) + expect(stack.name).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should delete role in stack', done => { + getRole(roleUID) + .delete() + .then((roles) => { + expect(roles.notice).to.be.equal('The role deleted successfully.') + done() + }) + .catch(done) + }) +}) + +function getRole (uid = null) { + return client.stack({ api_key: process.env.API_KEY }).role(uid) +} diff --git a/test/sanity-check/api/stack-share.js b/test/sanity-check/api/stack-share.js new file mode 100644 index 00000000..d9554299 --- /dev/null +++ b/test/sanity-check/api/stack-share.js @@ -0,0 +1,35 @@ +import { expect } from 'chai' +import { describe, it, setup } from 'mocha' +import { jsonReader } from '../utility/fileOperations/readwrite' +import { contentstackClient } from '../utility/ContentstackClient.js' +import dotenv from 'dotenv' + +dotenv.config() +var client = {} + +describe('Stack Share/Unshare', () => { + setup(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + it('should share stack test', done => { + const role = jsonReader('roles.json') + client.stack({ api_key: process.env.API_KEY }) + .share(['test@test.com'], { 'test@test.com': [role[0].uid] }) + .then((response) => { + expect(response.notice).to.be.equal('The invitation has been sent successfully.') + done() + }) + .catch(done) + }) + + it('should unshare stack test', done => { + client.stack({ api_key: process.env.API_KEY }) + .unShare('test@test.com') + .then((response) => { + expect(response.notice).to.be.equal('The stack has been successfully unshared.') + done() + }) + .catch(done) + }) +}) diff --git a/test/sanity-check/api/team-test.js b/test/sanity-check/api/team-test.js new file mode 100644 index 00000000..0a103b29 --- /dev/null +++ b/test/sanity-check/api/team-test.js @@ -0,0 +1,207 @@ +import { describe, it, beforeEach } from 'mocha' +import { expect } from 'chai' +import { jsonReader } from '../utility/fileOperations/readwrite' +import { contentstackClient } from '../utility/ContentstackClient.js' +import dotenv from 'dotenv' + +dotenv.config() +let client = {} + +const organizationUid = process.env.ORGANIZATION +const stackApiKey = process.env.API_KEY +let userId = '' +let teamUid1 = '' +let teamUid2 = '' +let orgRole1 = '' +let stackRole1 = '' +let stackRole2 = '' +let stackRole3 = '' + +describe('Teams API Test', () => { + beforeEach(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + const orgRoles = jsonReader('orgRoles.json') + orgRole1 = orgRoles[0].uid + }) + + it('should create new team 1 when required object is passed', async () => { + const response = await makeTeams().create({ + name: 'test_team1', + users: [], + stackRoleMapping: [], + organizationRole: orgRole1 }) + teamUid1 = response.uid + expect(response.uid).not.to.be.equal(null) + expect(response.name).not.to.be.equal(null) + expect(response.stackRoleMapping).not.to.be.equal(null) + expect(response.organizationRole).not.to.be.equal(null) + }) + + it('should create new team 2 when required object is passed', async () => { + const response = await makeTeams().create({ + name: 'test_team2', + users: [], + stackRoleMapping: [], + organizationRole: orgRole1 }) + teamUid2 = response.uid + expect(response.uid).not.to.be.equal(null) + expect(response.name).not.to.be.equal(null) + expect(response.stackRoleMapping).not.to.be.equal(null) + expect(response.organizationRole).not.to.be.equal(null) + }) + + it('should get all the teams when correct organization uid is passed', async () => { + const response = await makeTeams().fetchAll() + expect(response.items[0].organizationUid).to.be.equal(organizationUid) + expect(response.items[0].name).not.to.be.equal(null) + expect(response.items[0].created_by).not.to.be.equal(null) + expect(response.items[0].updated_by).not.to.be.equal(null) + }) + + it('should fetch the team when team uid is passed', async () => { + const response = await makeTeams(teamUid1).fetch() + expect(response.uid).to.be.equal(teamUid1) + expect(response.organizationUid).to.be.equal(organizationUid) + expect(response.name).not.to.be.equal(null) + expect(response.created_by).not.to.be.equal(null) + expect(response.updated_by).not.to.be.equal(null) + }) + + it('should update team when updating data is passed', async () => { + const updateData = { + name: 'name', + users: [ + { + email: process.env.EMAIL + } + ], + organizationRole: orgRole1, + stackRoleMapping: [] + } + await makeTeams(teamUid1).update(updateData) + .then((team) => { + expect(team.name).to.be.equal(updateData.name) + expect(team.createdByUserName).not.to.be.equal(undefined) + expect(team.updatedByUserName).not.to.be.equal(undefined) + }) + }) + + it('should delete team 1 when team uid is passed', async () => { + const response = await makeTeams(teamUid1).delete() + expect(response.status).to.be.equal(204) + }) +}) + +describe('Teams Stack Role Mapping API Test', () => { + beforeEach(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + const stackRoles = jsonReader('roles.json') + stackRole1 = stackRoles[0].uid + stackRole2 = stackRoles[1].uid + stackRole3 = stackRoles[2].uid + }) + + it('should add roles', done => { + const stackRoleMappings = { + stackApiKey: stackApiKey, + roles: [ + stackRole1 + ] + } + makestackRoleMappings(teamUid2).add(stackRoleMappings).then((response) => { + expect(response.stackRoleMapping).not.to.be.equal(undefined) + expect(response.stackRoleMapping.roles[0]).to.be.equal(stackRoleMappings.roles[0]) + expect(response.stackRoleMapping.stackApiKey).to.be.equal(stackRoleMappings.stackApiKey) + done() + }) + .catch(done) + }) + + it('should fetch all stackRoleMappings', done => { + makestackRoleMappings(teamUid2).fetchAll().then((response) => { + expect(response.stackRoleMappings).to.be.not.equal(undefined) + done() + }) + .catch(done) + }) + + it('should update roles', done => { + const stackRoleMappings = { + roles: [ + stackRole1, + stackRole2, + stackRole3 + ] + } + makestackRoleMappings(teamUid2, stackApiKey).update(stackRoleMappings).then((response) => { + expect(response.stackRoleMapping).not.to.be.equal(undefined) + expect(response.stackRoleMapping.roles[0]).to.be.equal(stackRoleMappings.roles[0]) + expect(response.stackRoleMapping.stackApiKey).to.be.equal(stackApiKey) + done() + }) + .catch(done) + }) + + it('should delete roles', done => { + makestackRoleMappings(teamUid2, stackApiKey).delete().then((response) => { + expect(response.status).to.be.equal(204) + done() + }) + .catch(done) + }) +}) + +describe('Teams Users API Test', () => { + beforeEach(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + it('should add the user when user\'s mail is passed', done => { + const usersMail = { + emails: ['email1@email.com'] + } + makeUsers(teamUid2).add(usersMail).then((response) => { + expect(response.status).to.be.equal(201) + done() + }) + .catch(done) + }) + + it('should fetch all users', done => { + makeUsers(teamUid2).fetchAll().then((response) => { + response.items.forEach((user) => { + userId = response.items[0].userId + expect(user.userId).to.be.not.equal(null) + done() + }) + }) + .catch(done) + }) + + it('should remove the user when uid is passed', done => { + makeUsers(teamUid2, userId).remove().then((response) => { + expect(response.status).to.be.equal(204) + done() + }) + .catch(done) + }) + + it('should delete team 2 when team uid is passed', async () => { + const response = await makeTeams(teamUid2).delete() + expect(response.status).to.be.equal(204) + }) +}) + +function makeTeams (teamUid = null) { + return client.organization(organizationUid).teams(teamUid) +} + +function makestackRoleMappings (teamUid, stackApiKey = null) { + return client.organization(organizationUid).teams(teamUid).stackRoleMappings(stackApiKey) +} + +function makeUsers (teamUid, userId = null) { + return client.organization(organizationUid).teams(teamUid).teamUsers(userId) +} diff --git a/test/sanity-check/api/webhook-test.js b/test/sanity-check/api/webhook-test.js new file mode 100644 index 00000000..014c8921 --- /dev/null +++ b/test/sanity-check/api/webhook-test.js @@ -0,0 +1,172 @@ +import { expect } from 'chai' +import { describe, it, setup } from 'mocha' +import path from 'path' +import { jsonReader } from '../utility/fileOperations/readwrite.js' +import { webhook, updateWebhook } from '../mock/webhook.js' +import { cloneDeep } from 'lodash' +import { contentstackClient } from '../utility/ContentstackClient.js' +import dotenv from 'dotenv' + +dotenv.config() +let client = {} + +let webhookUid = '' +let webhookUid2 = '' +describe('Webhook api Test', () => { + setup(() => { + const user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + + it('should create Webhook', done => { + makeWebhook() + .create(webhook) + .then((response) => { + webhookUid = response.uid + expect(response.uid).to.be.not.equal(null) + expect(response.name).to.be.equal(webhook.webhook.name) + expect(response.destinations[0].target_url).to.be.equal(webhook.webhook.destinations[0].target_url) + expect(response.destinations[0].http_basic_auth).to.be.equal(webhook.webhook.destinations[0].http_basic_auth) + expect(response.destinations[0].http_basic_password).to.be.equal(webhook.webhook.destinations[0].http_basic_password) + expect(response.channels[0]).to.be.equal(webhook.webhook.channels[0]) + expect(response.retry_policy).to.be.equal(webhook.webhook.retry_policy) + expect(response.disabled).to.be.equal(webhook.webhook.disabled) + done() + }) + .catch(done) + }) + + it('should fetch Webhook', done => { + makeWebhook(webhookUid) + .fetch() + .then((response) => { + expect(response.uid).to.be.equal(webhookUid) + expect(response.name).to.be.equal(webhook.webhook.name) + expect(response.destinations[0].target_url).to.be.equal(webhook.webhook.destinations[0].target_url) + expect(response.destinations[0].http_basic_auth).to.be.equal(webhook.webhook.destinations[0].http_basic_auth) + expect(response.destinations[0].http_basic_password).to.be.equal(webhook.webhook.destinations[0].http_basic_password) + expect(response.channels[0]).to.be.equal(webhook.webhook.channels[0]) + expect(response.retry_policy).to.be.equal(webhook.webhook.retry_policy) + expect(response.disabled).to.be.equal(webhook.webhook.disabled) + done() + }) + .catch(done) + }) + + it('should fetch and update Webhook', done => { + makeWebhook(webhookUid) + .fetch() + .then((webhookRes) => { + Object.assign(webhookRes, cloneDeep(updateWebhook.webhook)) + return webhookRes.update() + }) + .then((response) => { + expect(response.uid).to.be.equal(webhookUid) + expect(response.name).to.be.equal(updateWebhook.webhook.name) + expect(response.destinations[0].target_url).to.be.equal(updateWebhook.webhook.destinations[0].target_url) + expect(response.destinations[0].http_basic_auth).to.be.equal(updateWebhook.webhook.destinations[0].http_basic_auth) + expect(response.destinations[0].http_basic_password).to.be.equal(updateWebhook.webhook.destinations[0].http_basic_password) + expect(response.channels[0]).to.be.equal(updateWebhook.webhook.channels[0]) + expect(response.retry_policy).to.be.equal(updateWebhook.webhook.retry_policy) + expect(response.disabled).to.be.equal(updateWebhook.webhook.disabled) + done() + }) + .catch(done) + }) + + it('should update Webhook', done => { + const webhookObject = makeWebhook(webhookUid) + Object.assign(webhookObject, cloneDeep(updateWebhook.webhook)) + webhookObject.update() + .then((response) => { + expect(response.uid).to.be.equal(webhookUid) + expect(response.name).to.be.equal(updateWebhook.webhook.name) + expect(response.destinations[0].target_url).to.be.equal(updateWebhook.webhook.destinations[0].target_url) + expect(response.destinations[0].http_basic_auth).to.be.equal(updateWebhook.webhook.destinations[0].http_basic_auth) + expect(response.destinations[0].http_basic_password).to.be.equal(updateWebhook.webhook.destinations[0].http_basic_password) + expect(response.channels[0]).to.be.equal(updateWebhook.webhook.channels[0]) + expect(response.retry_policy).to.be.equal(updateWebhook.webhook.retry_policy) + expect(response.disabled).to.be.equal(updateWebhook.webhook.disabled) + done() + }) + .catch(done) + }) + + it('should import Webhook', done => { + makeWebhook().import({ + webhook: path.join(__dirname, '../mock/webhook.json') + }) + .then((response) => { + webhookUid2 = response.uid + expect(response.uid).to.be.not.equal(null) + done() + }) + .catch(done) + }) + + it('should get executions of a webhook', done => { + const asset = { + upload: path.join(__dirname, '../mock/webhook.json') + } + client.stack({ api_key: process.env.API_KEY }).asset().create(asset) + .then((assetFile) => { + makeWebhook(webhookUid).executions() + .then((response) => { + response.webhooks.forEach(webhookResponse => { + expect(webhookResponse.uid).to.be.not.equal(null) + expect(webhookResponse.status).to.be.equal(200) + expect(webhookResponse.event_data.module).to.be.equal('asset') + expect(webhookResponse.event_data.api_key).to.be.equal(process.env.API_KEY) + + const webhookasset = webhookResponse.event_data.data.asset + expect(webhookasset.uid).to.be.equal(assetFile.uid) + expect(webhookasset.filename).to.be.equal(assetFile.filename) + expect(webhookasset.url).to.be.equal(assetFile.url) + expect(webhookasset.title).to.be.equal(assetFile.title) + + expect(webhookResponse.webhooks[0]).to.be.equal(webhookUid) + expect(webhookResponse.channel[0]).to.be.equal('assets.create') + }) + done() + }) + .catch(done) + }).catch(done) + }) + + it('should get all Webhook', done => { + makeWebhook().fetchAll() + .then((collection) => { + collection.items.forEach(webhookResponse => { + expect(webhookResponse.uid).to.be.not.equal(null) + expect(webhookResponse.name).to.be.not.equal(null) + expect(webhookResponse.org_uid).to.be.equal(process.env.ORGANIZATION) + }) + done() + }) + .catch(done) + }) + + it('should delete the created webhook', done => { + makeWebhook(webhookUid) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('The Webhook was deleted successfully') + done() + }) + .catch(done) + }) + + it('should delete the created webhook', done => { + makeWebhook(webhookUid2) + .delete() + .then((data) => { + expect(data.notice).to.be.equal('The Webhook was deleted successfully') + done() + }) + .catch(done) + }) +}) + +function makeWebhook (uid = null) { + return client.stack({ api_key: process.env.API_KEY }).webhook(uid) +} diff --git a/test/sanity-check/api/workflow-test.js b/test/sanity-check/api/workflow-test.js new file mode 100644 index 00000000..01c96545 --- /dev/null +++ b/test/sanity-check/api/workflow-test.js @@ -0,0 +1,143 @@ +import { expect } from 'chai' +import { describe, it, setup } from 'mocha' +import { jsonReader } from '../utility/fileOperations/readwrite.js' +import { contentstackClient } from '../utility/ContentstackClient.js' +import { firstWorkflow, secondWorkflow, finalWorkflow } from '../mock/workflow.js' +import dotenv from 'dotenv' + +dotenv.config() +let client = {} + +let user = {} +let workflowUid = '' +let workflowUid2 = '' +let workflowUid3 = '' + +describe('Workflow api Test', () => { + setup(async () => { + user = jsonReader('loggedinuser.json') + client = contentstackClient(user.authtoken) + }) + + it('should create Workflow Content type Multi page from JSON', done => { + const workflow = { ...firstWorkflow } + makeWorkflow() + .create({ workflow }) + .then(workflowResponse => { + workflowUid = workflowResponse.uid + expect(workflowResponse.name).to.be.equal(firstWorkflow.name) + expect(workflowResponse.content_types.length).to.be.equal(firstWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(firstWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should create Workflow Content type Multi page', done => { + const workflow = { ...secondWorkflow } + makeWorkflow() + .create({ workflow }) + .then(workflowResponse => { + workflowUid2 = workflowResponse.uid + expect(workflowResponse.name).to.be.equal(secondWorkflow.name) + expect(workflowResponse.content_types.length).to.be.equal(secondWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(secondWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should create Workflow Content type single page', done => { + const workflow = { ...finalWorkflow } + makeWorkflow() + .create({ workflow }) + .then(workflowResponse => { + workflowUid3 = workflowResponse.uid + expect(workflowResponse.name).to.be.equal(finalWorkflow.name) + expect(workflowResponse.content_types.length).to.be.equal(finalWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(finalWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should fetch Workflow from UID', done => { + makeWorkflow(workflowUid) + .fetch() + .then(workflowResponse => { + workflowUid = workflowResponse.uid + expect(workflowResponse.name).to.be.equal(firstWorkflow.name) + expect(workflowResponse.content_types.length).to.be.equal(firstWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(firstWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should update Workflow from UID', done => { + const workflowObj = makeWorkflow(workflowUid) + Object.assign(workflowObj, firstWorkflow) + workflowObj.name = 'Updated name' + + workflowObj + .update() + .then(workflowResponse => { + workflowUid = workflowResponse.uid + expect(workflowResponse.name).to.be.equal('Updated name') + expect(workflowResponse.content_types.length).to.be.equal(firstWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(firstWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should fetch and update Workflow from UID', done => { + makeWorkflow(workflowUid) + .fetch() + .then(workflowResponse => { + workflowResponse.name = firstWorkflow.name + return workflowResponse.update() + }) + .then(workflowResponse => { + expect(workflowResponse.name).to.be.equal(firstWorkflow.name) + expect(workflowResponse.content_types.length).to.be.equal(firstWorkflow.content_types.length) + expect(workflowResponse.workflow_stages.length).to.be.equal(firstWorkflow.workflow_stages.length) + done() + }) + .catch(done) + }) + + it('should delete Workflow from UID', done => { + makeWorkflow(workflowUid) + .delete() + .then(response => { + expect(response.notice).to.be.equal('Workflow deleted successfully.') + done() + }) + .catch(done) + }) + + it('should delete Workflow from UID2 ', done => { + makeWorkflow(workflowUid2) + .delete() + .then(response => { + expect(response.notice).to.be.equal('Workflow deleted successfully.') + done() + }) + .catch(done) + }) + + it('should delete Workflow from UID3 ', done => { + makeWorkflow(workflowUid3) + .delete() + .then(response => { + expect(response.notice).to.be.equal('Workflow deleted successfully.') + done() + }) + .catch(done) + }) +}) + +function makeWorkflow (uid = null) { + return client.stack({ api_key: process.env.API_KEY }).workflow(uid) +} diff --git a/test/sanity-check/mock/branch.js b/test/sanity-check/mock/branch.js index 3016c0a3..df0e4ae3 100644 --- a/test/sanity-check/mock/branch.js +++ b/test/sanity-check/mock/branch.js @@ -4,13 +4,13 @@ const branch = { } const stageBranch = { - uid: 'staging', + uid: 'staging1', source: 'main' } const devBranch = { - uid: 'merge_test', - source: 'staging' + uid: 'test_merge', + source: 'staging1' } export { diff --git a/test/sanity-check/mock/deliveryToken.js b/test/sanity-check/mock/deliveryToken.js index f04f9c9c..aaf386f6 100644 --- a/test/sanity-check/mock/deliveryToken.js +++ b/test/sanity-check/mock/deliveryToken.js @@ -16,7 +16,7 @@ const createDeliveryToken = { module: 'branch', branches: [ 'main', - 'staging' + 'staging1' ], acl: { read: true @@ -25,7 +25,7 @@ const createDeliveryToken = { { module: 'branch_alias', branch_aliases: [ - 'staging_alias' + 'staging1_alias' ], acl: { read: true @@ -52,7 +52,7 @@ const createDeliveryToken2 = { module: 'branch', branches: [ 'main', - 'staging' + 'staging1' ], acl: { read: true @@ -61,7 +61,7 @@ const createDeliveryToken2 = { { module: 'branch_alias', branch_aliases: [ - 'staging_alias' + 'staging1_alias' ], acl: { read: true diff --git a/test/sanity-check/mock/managementToken.js b/test/sanity-check/mock/managementToken.js new file mode 100644 index 00000000..f229b16e --- /dev/null +++ b/test/sanity-check/mock/managementToken.js @@ -0,0 +1,72 @@ +const createManagementToken = { + token: { + name: 'Dev Token', + description: 'This is a sample management token.', + scope: [ + { + module: 'content_type', + acl: { + read: true, + write: true + } + }, + { + module: 'branch', + branches: [ + 'main' + ], + acl: { + read: true + } + }, + { + module: 'branch_alias', + branch_aliases: [ + 'staging1_alias' + ], + acl: { + read: true + } + } + ], + expires_on: '2024-12-10', + is_email_notification_enabled: true + } +} +const createManagementToken2 = { + token: { + name: 'Prod Token', + description: 'This is a sample management token.', + scope: [ + { + module: 'content_type', + acl: { + read: true, + write: true + } + }, + { + module: 'branch', + branches: [ + 'main' + ], + acl: { + read: true + } + }, + { + module: 'branch_alias', + branch_aliases: [ + 'staging1_alias' + ], + acl: { + read: true + } + } + ], + expires_on: '2024-12-10', + is_email_notification_enabled: true + } +} + +export { createManagementToken, createManagementToken2 } diff --git a/test/sanity-check/mock/release.js b/test/sanity-check/mock/release.js new file mode 100644 index 00000000..9bb45e77 --- /dev/null +++ b/test/sanity-check/mock/release.js @@ -0,0 +1,10 @@ +const releaseCreate = { + release: { + name: 'First release', + description: 'Adding release date 2020-21-07', + locked: false, + archived: false + } +} + +export { releaseCreate } diff --git a/test/sanity-check/mock/role.js b/test/sanity-check/mock/role.js new file mode 100644 index 00000000..343bec72 --- /dev/null +++ b/test/sanity-check/mock/role.js @@ -0,0 +1,82 @@ +const role = { + role: { + name: 'testRole', + description: 'This is a test role.', + rules: [ + { + module: 'branch', + branches: [ + 'main' + ], + acl: { + read: true + } + }, + { + module: 'branch_alias', + branch_aliases: [ + 'staging1_alias' + ], + acl: { + read: true + } + }, + { + module: 'content_type', + content_types: [ + '$all' + ], + acl: { + read: true, + sub_acl: { + read: true + } + } + }, + { + module: 'asset', + assets: [ + '$all' + ], + acl: { + read: true, + update: true, + publish: true, + delete: true + } + }, + { + module: 'folder', + folders: [ + '$all' + ], + acl: { + read: true, + sub_acl: { + read: true + } + } + }, + { + module: 'environment', + environments: [ + '$all' + ], + acl: { + read: true + } + }, + { + module: 'locale', + locales: [ + 'en-us' + ], + acl: { + read: true + } + } + ] + } +} + +export default role diff --git a/test/sanity-check/mock/webhook.js b/test/sanity-check/mock/webhook.js new file mode 100644 index 00000000..86af1eb4 --- /dev/null +++ b/test/sanity-check/mock/webhook.js @@ -0,0 +1,40 @@ +const webhook = { + webhook: { + name: 'Test', + destinations: [{ + target_url: 'http://example.com', + http_basic_auth: 'basic', + http_basic_password: 'test', + custom_header: [{ + header_name: 'Custom', + value: 'testing' + }] + }], + channels: [ + 'assets.create' + ], + retry_policy: 'manual', + disabled: false + } +} + +const updateWebhook = { + webhook: { + name: 'Updated webhook', + destinations: [{ + target_url: 'http://example.com', + http_basic_auth: 'basic', + http_basic_password: 'test', + custom_header: [{ + header_name: 'Custom', + value: 'testing' + }] + }], + channels: [ + 'assets.create' + ], + retry_policy: 'manual', + disabled: true + } +} +export { webhook, updateWebhook } diff --git a/test/sanity-check/mock/webhook.json b/test/sanity-check/mock/webhook.json new file mode 100644 index 00000000..5667abc9 --- /dev/null +++ b/test/sanity-check/mock/webhook.json @@ -0,0 +1,17 @@ +{ + "name": "Upload webhook", + "destinations": [{ + "target_url": "http://example.com", + "http_basic_auth": "basic", + "http_basic_password": "test", + "custom_header": [{ + "header_name": "Custom", + "value": "testing" + }] + }], + "channels": [ + "assets.create" + ], + "retry_policy": "manual", + "disabled": "true" +} \ No newline at end of file diff --git a/test/sanity-check/mock/workflow.js b/test/sanity-check/mock/workflow.js new file mode 100644 index 00000000..4ae2930a --- /dev/null +++ b/test/sanity-check/mock/workflow.js @@ -0,0 +1,126 @@ +const firstWorkflow = { + workflow_stages: [ + { + color: '#2196f3', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + next_available_stages: ['$all'], + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + entry_lock: '$none', + name: 'First stage' + }, + { + color: '#e53935', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + next_available_stages: ['$all'], + entry_lock: '$none', + name: 'Second stage' + } + ], + branches: [ + 'main' + ], + admin_users: { users: [] }, + name: 'First Workflow', + content_types: ['multi_page_from_json'] +} +const secondWorkflow = { + workflow_stages: [ + { + color: '#2196f3', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + next_available_stages: ['$all'], + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + entry_lock: '$none', + name: 'first stage' + }, + { + isNew: true, + color: '#e53935', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + next_available_stages: ['$all'], + entry_lock: '$none', + name: 'stage 2' + } + ], + branches: [ + 'main' + ], + admin_users: { users: [] }, + name: 'Second workflow', + enabled: true, + content_types: ['multi_page'] +} +const finalWorkflow = { + workflow_stages: [ + { + color: '#2196f3', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + next_available_stages: ['$all'], + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + entry_lock: '$none', + name: 'Review' + }, + { + color: '#74ba76', + SYS_ACL: { roles: { uids: [] }, users: { uids: ['$all'] }, others: {} }, + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + next_available_stages: ['$all'], + entry_lock: '$none', + name: 'Complet' + } + ], + branches: [ + 'main' + ], + admin_users: { users: [] }, + name: 'Workflow', + enabled: true, + content_types: ['single_page'] +} + +const firstPublishRules = { + isNew: true, + actions: ['publish'], + content_types: ['multi_page_from_json'], + locales: ['en-at'], + environment: 'environment_name', + workflow_stage: '', + approvers: { users: ['user_id'], roles: ['role_uid'] } +} +const secondPublishRules = { + isNew: true, + actions: ['publish'], + content_types: ['multi_page'], + locales: ['en-at'], + environment: 'environment_name', + workflow_stage: '', + approvers: { users: ['user_id'], roles: ['role_uid'] } +} + +export { + firstWorkflow, + secondWorkflow, + finalWorkflow, + firstPublishRules, + secondPublishRules +} diff --git a/test/sanity-check/sanity.js b/test/sanity-check/sanity.js index af0acaa7..bb69aafd 100644 --- a/test/sanity-check/sanity.js +++ b/test/sanity-check/sanity.js @@ -5,19 +5,21 @@ require('./api/locale-test') require('./api/environment-test') require('./api/branch-test') require('./api/branchAlias-test') -// require('./api/role-test') +require('./api/role-test') +require('./api/stack-share') require('./api/deliveryToken-test') -// require('./api/managementToken-test') +require('./api/managementToken-test') require('./api/contentType-test') require('./api/asset-test') require('./api/extension-test') require('./api/entry-test') -// require('./api/webhook-test') -// require('./api/workflow-test') +require('./api/webhook-test') +require('./api/workflow-test') require('./api/globalfield-test') -// require('./api/release-test') +require('./api/release-test') require('./api/label-test') require('./api/contentType-delete-test') require('./api/taxonomy-test') require('./api/terms-test') require('./api/delete-test') +require('./api/team-test') diff --git a/test/typescript/taxonomy.ts b/test/typescript/taxonomy.ts index adf200e1..901a5e6a 100644 --- a/test/typescript/taxonomy.ts +++ b/test/typescript/taxonomy.ts @@ -64,5 +64,27 @@ export function testTaxonomy(stack: Stack) { }) }) }) + test('Import taxonomy', async () => { + const taxonomyData = { + "uid": "UID", + "name": "name", + "description": "test" + } + await stack.taxonomy() + .import(taxonomyData) + .then((taxonomyResponse) => { + expect(taxonomyResponse.name).to.be.equal('name') + }) + .catch(() => {}); + }) + test('Export taxonomy', async () => { + await stack.taxonomy(taxonomyUID) + .export({ format: 'json'}) + .then((taxonomyResponse) => { + expect(taxonomyResponse.uid).to.be.equal(taxonomyUID) + expect(taxonomyResponse.name).to.be.not.equal(null) + }) + .catch(() => {}); + }) }) } diff --git a/test/typescript/teamUsers.ts b/test/typescript/teamUsers.ts index 1cfad9a9..5058e767 100644 --- a/test/typescript/teamUsers.ts +++ b/test/typescript/teamUsers.ts @@ -25,10 +25,12 @@ export function testTeamUsers (organization: Organization) { test('should fetch all users', done => { organization.teams(teamUid).teamUsers() .fetchAll() - .then((response) => { - expect(response.items[0]).not.to.be.equal(undefined) - done() + .then((users) => { + users.items.forEach((user) => { + expect(user.userId).to.be.not.equal(null) }) + done() + }) .catch(done) }) }) diff --git a/test/unit/team-users-test.js b/test/unit/team-users-test.js index 529eed25..c2f3842a 100644 --- a/test/unit/team-users-test.js +++ b/test/unit/team-users-test.js @@ -12,7 +12,7 @@ describe('Contentstack Team Users test', () => { makeTeamUsers().fetchAll() .then((users) => { users.items.forEach((user) => { - expect(user.uidId).to.be.not.equal(null) + expect(user.userId).to.be.not.equal(null) }) done() }) diff --git a/types/stack/taxonomy/index.d.ts b/types/stack/taxonomy/index.d.ts index c0a23a22..bb9b0cea 100644 --- a/types/stack/taxonomy/index.d.ts +++ b/types/stack/taxonomy/index.d.ts @@ -5,12 +5,11 @@ import { Term, Terms } from "../taxonomy/terms" export interface Taxonomy extends SystemFields, SystemFunction { terms(): Terms terms(uid: string): Term -} - -export interface Taxonomies extends Queryable { + export(params?: any): Promise } -export interface Taxonomies extends Creatable { +export interface Taxonomies extends Creatable, Queryable { + import(data: TaxonomyData, params?: any): Promise } export interface TaxonomyData extends AnyProperty { diff --git a/types/teams/teamUsers/index.d.ts b/types/teams/teamUsers/index.d.ts index a992eef0..8dcacf5a 100644 --- a/types/teams/teamUsers/index.d.ts +++ b/types/teams/teamUsers/index.d.ts @@ -1,15 +1,16 @@ import { AnyProperty } from "../../utility/fields"; export interface TeamUsers extends TeamUserData { - add(data:TeamUserData): Promise - fetchAll(params?: { includeUserDetails: boolean, include_count: boolean}): Promise + add(data:TeamUserData): Promise; + fetchAll(params?: { includeUserDetails: boolean, include_count: boolean}): Promise; } export interface TeamUser { - remove(): Promise + userId: string; + remove(): Promise; } export interface TeamUserData extends AnyProperty { - emails?: string[] - users?: string[] + emails?: string[]; + users?: string[]; }