Skip to content

Commit 302cfbc

Browse files
authored
Merge pull request #586 from ProcessMaker/add_projectApi
add pmProjectAPI
2 parents e5ea505 + 6ab659a commit 302cfbc

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

pages/pmProjectsAPI.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
export class PMProjectsAPI {
2+
/**
3+
* Retrieves a project by its title from the ProcessMaker API
4+
* @param {string} projectTitle - The title of the project to search for
5+
* @returns {Promise<Object>} The project object if found, undefined otherwise
6+
*/
7+
getProjectByTitleAPI(projectTitle) {
8+
return cy.window().then(win => {
9+
return win.ProcessMaker.apiClient.get('/projects', { params: { filter: projectTitle } }).then(response => {
10+
const project = response.data.data.find(project => project.title === projectTitle);
11+
return project;
12+
});
13+
});
14+
}
15+
16+
/**
17+
* Creates a new project via the ProcessMaker API
18+
* @param {Object} payload - The project data to create in this format
19+
* {
20+
* title: "name_project",
21+
* categories: categoryID,
22+
* user_id: userID,
23+
* members: '{"users":["1"], "groups":["1"]}'
24+
* };
25+
* @param {boolean} ignoreTakenError - If true, returns existing project when name is already taken
26+
* @returns {Promise<Object>} The created project data or existing project if name is taken
27+
* @throws {Error} If project creation fails and ignoreTakenError is false
28+
*/
29+
createProjectAPI(payload, ignoreTakenError = true) {
30+
const formData = new FormData();
31+
formData.append('title', payload.title);
32+
formData.append('categories', payload.categories);
33+
formData.append('user_id', payload.user_id);
34+
formData.append('members', payload.members);
35+
return cy.window().then(win => {
36+
return win.ProcessMaker.apiClient.post('/projects', formData, {
37+
headers: {
38+
'Content-Type': 'application/json'
39+
}
40+
}).then(response => {
41+
return response.data;
42+
}).catch(err => {
43+
if (ignoreTakenError && err.response.data.message.toLowerCase() === 'the name has already been taken.') {
44+
return this.getProjectByTitleAPI(payload.title);
45+
} else {
46+
throw err;
47+
}
48+
});
49+
});
50+
}
51+
}

0 commit comments

Comments
 (0)