-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathchallenges-service.test.ts
More file actions
153 lines (127 loc) · 4.86 KB
/
challenges-service.test.ts
File metadata and controls
153 lines (127 loc) · 4.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
import {
ChallengesService,
challengesPlatform,
} from "../../../app/challenges-platform";
import { uuid } from "../../../app/common";
import { CustomChallenge, CustomTransformer } from "../custom-transformer";
import { challengeFactory } from "../factories/challenge-factory";
describe("ChallengesService", () => {
describe("findByUuid", () => {
describe("when the id is invalid", () => {
it("returns an error", async () => {
const result = await ChallengesService.findByUuid("invalid-id");
expect(result.err).toBe(true);
expect(result.val.toString()).toBe("Error: Invalid UUID");
});
});
describe("when there is an existing record", () => {
it("returns the challenge", async () => {
const challenge = await challengeFactory();
const result = await ChallengesService.findByUuid(challenge.uuid);
if (!result.ok) fail("Expected result to be Ok");
expect(result.val.title).toBe("Test Challenge");
expect(result.val.body).toBe("This is a test challenge");
expect(result.val.points).toBe(100);
});
});
describe("when there is no record", () => {
it("returns an error", async () => {
const testUuid = uuid.create();
const result = await ChallengesService.findByUuid(testUuid);
expect(result.err).toBe(true);
expect(result.val.toString()).toBe("Error: Challenge not found");
});
});
});
describe("findById", () => {
describe("when there is an existing record", () => {
it("returns the challenge", async () => {
const challenge = await challengeFactory();
const result = await ChallengesService.findById(challenge.id);
if (!result.ok) fail("Expected result to be Ok");
expect(result.val.title).toBe("Test Challenge");
expect(result.val.body).toBe("This is a test challenge");
expect(result.val.points).toBe(100);
});
});
describe("when there is no record", () => {
it("returns an error", async () => {
const testId = -1;
const result = await ChallengesService.findById(testId);
expect(result.err).toBe(true);
expect(result.val.toString()).toBe("Error: Challenge not found");
});
});
});
describe("create", () => {
it("succesfully creates a challenge", async () => {
const title = "Test Challenge";
const body = "This is a test challenge";
const points = 100;
const result = await ChallengesService.create({
title,
body,
points,
});
if (!result.ok) fail("Expected result to be Ok");
expect(result.val.title).toBe(title);
expect(result.val.body).toBe(body);
expect(result.val.points).toBe(points);
});
});
describe("update", () => {
it("throws an error", async () => {
const result = await ChallengesService.update();
expect(result.err).toBe(true);
});
});
describe("destroy", () => {
it("throws an error", async () => {
const challenge = await challengeFactory();
const result = await ChallengesService.destroy(challenge.uuid);
if (!result.ok) fail("Expected result to be Ok");
expect(result.val.deleted).toBe(true);
});
});
describe("CustomTransformer", () => {
describe("with invalid metadata", () => {
it("will throw an error if metadata is incorrect", async () => {
const transformerName = "custom";
const invalidMetadata = {};
challengesPlatform.addTransformer(transformerName, CustomTransformer);
const createResult = await ChallengesService.create({
title: "Test Challenge",
body: "This is a test challenge",
points: 100,
type: transformerName,
metadata: invalidMetadata,
});
expect(createResult.err).toBe(true);
expect(createResult.val.toString()).toBe("Error: Invalid metadata");
});
});
describe("with valid metadata", () => {
it("will create a challenge with the provided metadata", async () => {
const transformerName = "custom";
const validMetadata = {
propString: "test",
propNumber: 123,
};
challengesPlatform.addTransformer(transformerName, CustomTransformer);
const createResult = await ChallengesService.create({
title: "Test Challenge",
body: "This is a test challenge",
points: 100,
type: transformerName,
metadata: validMetadata,
});
expect(createResult.ok).toBe(true);
expect(createResult.val).toBeInstanceOf(CustomChallenge);
if (!(createResult.val instanceof CustomChallenge))
fail("Expected instance of CustomChallenge");
expect(createResult.val.propString).toBe(validMetadata.propString);
expect(createResult.val.propNumber).toBe(validMetadata.propNumber);
});
});
});
});