feat(M08-B): 增加保洁多人协作策略
This commit is contained in:
@@ -94,6 +94,18 @@ const app = await buildApp({
|
||||
calls.push(['reject', input]);
|
||||
return { ...task('REJECTED'), rejectReason: input.reason };
|
||||
},
|
||||
async listMembers(input) {
|
||||
calls.push(['listMembers', input]);
|
||||
return [member('LEAD', '31', 500), member('ASSIST', '33', 100)];
|
||||
},
|
||||
async addMember(input) {
|
||||
calls.push(['addMember', input]);
|
||||
return [member('LEAD', '31', 500), member('ASSIST', input.cleanerUserId, input.rewardCents)];
|
||||
},
|
||||
async removeMember(input) {
|
||||
calls.push(['removeMember', input]);
|
||||
return [member('LEAD', '31', 600)];
|
||||
},
|
||||
async settlementCandidates(input) {
|
||||
calls.push(['settlementCandidates', input]);
|
||||
return { items: [task('COMPLETED')], total: 1, page: input.page, pageSize: input.pageSize };
|
||||
@@ -243,6 +255,36 @@ assert.equal(reject.statusCode, 200);
|
||||
assert.equal(calls.at(-1)[0], 'reject');
|
||||
assert.equal(calls.at(-1)[1].reason, 'photo is unclear');
|
||||
|
||||
const members = await app.inject({
|
||||
method: 'GET',
|
||||
url: '/admin-api/cleaning/tasks/101/members',
|
||||
headers: { authorization: `Bearer ${token}` }
|
||||
});
|
||||
assert.equal(members.statusCode, 200);
|
||||
assert.equal(calls.at(-1)[0], 'listMembers');
|
||||
assert.equal(members.json().data.length, 2);
|
||||
|
||||
const addedMember = await app.inject({
|
||||
method: 'POST',
|
||||
url: '/admin-api/cleaning/tasks/101/members',
|
||||
headers: { authorization: `Bearer ${token}` },
|
||||
payload: { cleanerUserId: '33', rewardCents: 100, note: 'support' }
|
||||
});
|
||||
assert.equal(addedMember.statusCode, 200);
|
||||
assert.equal(calls.at(-1)[0], 'addMember');
|
||||
assert.equal(calls.at(-1)[1].cleanerUserId, '33');
|
||||
assert.equal(calls.at(-1)[1].rewardCents, 100);
|
||||
|
||||
const removedMember = await app.inject({
|
||||
method: 'POST',
|
||||
url: '/admin-api/cleaning/tasks/101/members/33/remove',
|
||||
headers: { authorization: `Bearer ${token}` },
|
||||
payload: { note: 'done' }
|
||||
});
|
||||
assert.equal(removedMember.statusCode, 200);
|
||||
assert.equal(calls.at(-1)[0], 'removeMember');
|
||||
assert.equal(calls.at(-1)[1].cleanerUserId, '33');
|
||||
|
||||
const settlement = await app.inject({
|
||||
method: 'GET',
|
||||
url: '/admin-api/cleaning/settlement-candidates?page=1&pageSize=10',
|
||||
@@ -346,3 +388,17 @@ function settlementResponse(status) {
|
||||
note: ''
|
||||
};
|
||||
}
|
||||
|
||||
function member(memberRole, userId, rewardCents) {
|
||||
return {
|
||||
id: `${userId}01`,
|
||||
taskId: '101',
|
||||
userId,
|
||||
nickname: `Cleaner ${userId}`,
|
||||
memberRole,
|
||||
rewardCents,
|
||||
joinedAt: new Date(),
|
||||
removedAt: null,
|
||||
settledAt: null
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user