feat: add group recipe sharing and translation
This commit is contained in:
+56
-1
@@ -6,15 +6,17 @@ import { SESSION_COOKIE_NAME } from '../src/plugins/auth.js';
|
||||
import {
|
||||
createTestConfig,
|
||||
FakeAllowedEmailRepository,
|
||||
FakeGroupRepository,
|
||||
FakeRecipeRepository,
|
||||
fakeUserRepository,
|
||||
recipeDraft,
|
||||
source,
|
||||
} from './helpers/fakes.js';
|
||||
|
||||
function createDependencies(recipeRepository) {
|
||||
function createDependencies(recipeRepository, groupRepository = new FakeGroupRepository()) {
|
||||
return {
|
||||
allowedEmailRepository: new FakeAllowedEmailRepository(),
|
||||
groupRepository,
|
||||
recipeRepository,
|
||||
userRepository: fakeUserRepository,
|
||||
sourceExtractor: { extract: async () => source },
|
||||
@@ -336,3 +338,56 @@ test('import preview와 소유자별 Recipe CRUD가 이어진다', async (t) =>
|
||||
});
|
||||
assert.equal(deleteResponse.statusCode, 204);
|
||||
});
|
||||
|
||||
test('같은 그룹 사용자는 레시피를 함께 조회하지만 작성자만 수정하고 삭제한다', async (t) => {
|
||||
const recipeRepository = new FakeRecipeRepository();
|
||||
const groupRepository = new FakeGroupRepository([
|
||||
{ memberGoogleSubs: ['google-user-1', 'google-user-2'] },
|
||||
]);
|
||||
const app = await buildApp({
|
||||
config: createTestConfig(),
|
||||
dependencies: createDependencies(recipeRepository, groupRepository),
|
||||
});
|
||||
t.after(() => app.close());
|
||||
|
||||
const createResponse = await app.inject({
|
||||
method: 'POST',
|
||||
url: '/api/recipes',
|
||||
headers: { cookie: authCookie(app, 'google-user-1') },
|
||||
payload: { recipe: recipeDraft, source },
|
||||
});
|
||||
assert.equal(createResponse.statusCode, 201);
|
||||
const created = createResponse.json().recipe;
|
||||
|
||||
const sharedListResponse = await app.inject({
|
||||
method: 'GET',
|
||||
url: '/api/recipes',
|
||||
headers: { cookie: authCookie(app, 'google-user-2') },
|
||||
});
|
||||
assert.deepEqual(
|
||||
sharedListResponse.json().recipes.map((recipe) => recipe._id),
|
||||
[created._id],
|
||||
);
|
||||
|
||||
const sharedDetailResponse = await app.inject({
|
||||
method: 'GET',
|
||||
url: `/api/recipes/${created._id}`,
|
||||
headers: { cookie: authCookie(app, 'google-user-2') },
|
||||
});
|
||||
assert.equal(sharedDetailResponse.statusCode, 200);
|
||||
|
||||
const updateResponse = await app.inject({
|
||||
method: 'PATCH',
|
||||
url: `/api/recipes/${created._id}`,
|
||||
headers: { cookie: authCookie(app, 'google-user-2') },
|
||||
payload: { title: '다른 사용자의 수정' },
|
||||
});
|
||||
assert.equal(updateResponse.statusCode, 404);
|
||||
|
||||
const deleteResponse = await app.inject({
|
||||
method: 'DELETE',
|
||||
url: `/api/recipes/${created._id}`,
|
||||
headers: { cookie: authCookie(app, 'google-user-2') },
|
||||
});
|
||||
assert.equal(deleteResponse.statusCode, 404);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user