[CORL-263, CORL-225] Story Titles, Moderate Story, Mini Unit (#2294)

* feat: show story title + moderate this story link

* feat: introduce mini unit

* test: add tests for moderate story link

* fix: snapshot

* fix: lint / test

* fix: unwanted margin
This commit is contained in:
Kiwi
2019-05-03 22:01:34 +02:00
committed by GitHub
parent 85e2bbc089
commit 98795d161d
139 changed files with 1757 additions and 985 deletions
+53 -52
View File
@@ -353,6 +353,58 @@ export const users = {
),
};
export const stories = createFixtures<GQLStory>([
{
id: "story-1",
closedAt: null,
isClosed: false,
status: GQLSTORY_STATUS.OPEN,
createdAt: "2018-11-29T16:01:51.897Z",
metadata: {
author: "Vin Hoa",
title: "Finally a Cure for Cancer",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
{
id: "story-2",
closedAt: null,
isClosed: false,
status: GQLSTORY_STATUS.OPEN,
createdAt: "2018-11-29T16:01:51.897Z",
metadata: {
author: "Linh Nguyen",
title: "First Colony on Mars",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
{
id: "story-3",
closedAt: "2018-11-29T16:01:51.897Z",
createdAt: "2018-11-29T16:01:51.897Z",
isClosed: true,
status: GQLSTORY_STATUS.CLOSED,
metadata: {
author: undefined,
title: "World hunger has been defeated",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
]);
export const storyConnection = createFixture<GQLStoriesConnection>({
edges: [
{ node: stories[0], cursor: stories[0].createdAt },
{ node: stories[1], cursor: stories[1].createdAt },
],
pageInfo: { endCursor: null, hasNextPage: false },
});
export const emptyStories = createFixture<GQLStoriesConnection>({
edges: [],
pageInfo: { endCursor: null, hasNextPage: false },
});
export const baseComment = createFixture<GQLComment>({
author: users.commenters[0],
body: "Comment Body",
@@ -372,6 +424,7 @@ export const baseComment = createFixture<GQLComment>({
},
},
},
story: stories[0],
});
export const reportedComments = createFixtures<GQLComment>(
@@ -473,55 +526,3 @@ export const emptyCommunityUsers = createFixture<GQLUsersConnection>({
edges: [],
pageInfo: { endCursor: null, hasNextPage: false },
});
export const stories = createFixtures<GQLStory>([
{
id: "story-1",
closedAt: null,
isClosed: false,
status: GQLSTORY_STATUS.OPEN,
createdAt: "2018-11-29T16:01:51.897Z",
metadata: {
author: "Vin Hoa",
title: "Finally a Cure for Cancer",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
{
id: "story-2",
closedAt: null,
isClosed: false,
status: GQLSTORY_STATUS.OPEN,
createdAt: "2018-11-29T16:01:51.897Z",
metadata: {
author: "Linh Nguyen",
title: "First Colony on Mars",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
{
id: "story-3",
closedAt: "2018-11-29T16:01:51.897Z",
createdAt: "2018-11-29T16:01:51.897Z",
isClosed: true,
status: GQLSTORY_STATUS.CLOSED,
metadata: {
author: undefined,
title: "World hunger has been defeated",
publishedAt: "2018-11-29T16:01:51.897Z",
},
},
]);
export const storyConnection = createFixture<GQLStoriesConnection>({
edges: [
{ node: stories[0], cursor: stories[0].createdAt },
{ node: stories[1], cursor: stories[1].createdAt },
],
pageInfo: { endCursor: null, hasNextPage: false },
});
export const emptyStories = createFixture<GQLStoriesConnection>({
edges: [],
pageInfo: { endCursor: null, hasNextPage: false },
});
File diff suppressed because it is too large Load Diff
@@ -1,3 +1,6 @@
import { noop } from "lodash";
import { ReactTestRenderer } from "react-test-renderer";
import { pureMerge } from "talk-common/utils";
import {
GQLCOMMENT_STATUS,
@@ -21,8 +24,6 @@ import {
within,
} from "talk-framework/testHelpers";
import { noop } from "lodash";
import { ReactTestRenderer } from "react-test-renderer";
import create from "../create";
import {
emptyModerationQueues,
@@ -270,6 +271,12 @@ describe("tab bar", () => {
await waitForElement(() => getByTestID("moderate-container"));
expect(toJSON(getByTestID("moderate-tabBar-container"))).toMatchSnapshot();
});
it("should not show moderate story link in comment cards", async () => {
const { testRenderer } = await createTestRenderer();
const { getByTestID } = within(testRenderer.root);
await waitForElement(() => getByTestID("moderate-container"));
expect(within(testRenderer.root).queryByText("Moderate Story")).toBeNull();
});
});
describe("moderating specific story", () => {
@@ -365,6 +372,91 @@ describe("reported queue", () => {
expect(toJSON(getByTestID("moderate-main-container"))).toMatchSnapshot();
});
it("renders reported queue with comments", async () => {
const { testRenderer } = await createTestRenderer({
resolvers: createResolversStub<GQLResolver>({
Query: {
moderationQueues: () =>
pureMerge(emptyModerationQueues, {
reported: {
count: 2,
comments: createQueryResolverStub<
ModerationQueueToCommentsResolver
>(({ variables }) => {
expectAndFail(variables).toEqual({ first: 5 });
return {
edges: [
{
node: reportedComments[0],
cursor: reportedComments[0].createdAt,
},
{
node: reportedComments[1],
cursor: reportedComments[1].createdAt,
},
],
pageInfo: {
endCursor: reportedComments[1].createdAt,
hasNextPage: false,
},
};
}) as any,
},
}),
},
}),
});
const { getByTestID } = within(testRenderer.root);
await waitForElement(() => getByTestID("moderate-container"));
expect(toJSON(getByTestID("moderate-main-container"))).toMatchSnapshot();
});
it("shows a moderate story", async () => {
const {
testRenderer,
context: { transitionControl },
} = await createTestRenderer({
resolvers: createResolversStub<GQLResolver>({
Query: {
moderationQueues: () =>
pureMerge(emptyModerationQueues, {
reported: {
count: 2,
comments: createQueryResolverStub<
ModerationQueueToCommentsResolver
>(({ variables }) => {
expectAndFail(variables).toEqual({ first: 5 });
return {
edges: [
{
node: reportedComments[0],
cursor: reportedComments[0].createdAt,
},
{
node: reportedComments[1],
cursor: reportedComments[1].createdAt,
},
],
pageInfo: {
endCursor: reportedComments[1].createdAt,
hasNextPage: false,
},
};
}) as any,
},
}),
},
}),
});
const moderateStory = await waitForElement(
() => within(testRenderer.root).getAllByText("Moderate Story")[0]
);
transitionControl.allowTransition = false;
moderateStory.props.onClick({});
// Expect a routing request was made to the right url.
expect(transitionControl.history[0].pathname).toBe(
`/admin/moderate/${reportedComments[0].story.id}`
);
});
it("renders reported queue with comments and load more", async () => {
const moderationQueuesStub = pureMerge(emptyModerationQueues, {
reported: {
@@ -656,6 +748,50 @@ describe("rejected queue", () => {
expect(toJSON(getByTestID("moderate-main-container"))).toMatchSnapshot();
});
it("shows a moderate story", async () => {
const {
testRenderer,
context: { transitionControl },
} = await createTestRenderer({
resolvers: createResolversStub<GQLResolver>({
Query: {
comments: ({ variables }) => {
expectAndFail(variables).toEqual({
first: 5,
status: "REJECTED",
storyID: null,
});
return {
edges: [
{
node: rejectedComments[0],
cursor: rejectedComments[0].createdAt,
},
{
node: rejectedComments[1],
cursor: rejectedComments[1].createdAt,
},
],
pageInfo: {
endCursor: rejectedComments[1].createdAt,
hasNextPage: false,
},
};
},
},
}),
});
const moderateStory = await waitForElement(
() => within(testRenderer.root).getAllByText("Moderate Story")[0]
);
transitionControl.allowTransition = false;
moderateStory.props.onClick({});
// Expect a routing request was made to the right url.
expect(transitionControl.history[0].pathname).toBe(
`/admin/moderate/${reportedComments[0].story.id}`
);
});
it("renders rejected queue with comments and load more", async () => {
const { testRenderer } = await createTestRenderer({
resolvers: createResolversStub<GQLResolver>({