|
| 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