Skip to content

Commit 1a0c7b9

Browse files
authored
Fix Prod issues on /user command (RealDevSquad#161)
* Refactor/fix : handle case if no user found, improve test stas, remove time from time stamp * Refactor : discordJoinedAt to Joined Server on and return N/A for undefined server join date
1 parent 5bdc4f2 commit 1a0c7b9

File tree

4 files changed

+59
-13
lines changed

4 files changed

+59
-13
lines changed

src/controllers/userCommand.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import { env } from "../typeDefinitions/default.types";
22
import { discordTextResponse } from "../utils/discordResponse";
33
import { getUserDetails } from "../utils/getUserDetails";
44
import { formatUserDetails } from "../utils/formatUserDetails";
5+
import { USER_NOT_FOUND } from "../constants/responses";
56

67
export async function userCommand(discordId: string, env: env) {
78
try {
89
const userDetails = await getUserDetails(discordId);
10+
if (!userDetails.user?.discordId) {
11+
return discordTextResponse(USER_NOT_FOUND);
12+
}
913
const formattedUserDetails = formatUserDetails(userDetails);
1014
return discordTextResponse(formattedUserDetails);
1115
} catch (error) {

src/utils/formatUserDetails.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
11
import { UserResponseType } from "../typeDefinitions/rdsUser";
22

33
export function convertTimeStamp(userDetails: UserResponseType) {
4-
const timestamp = userDetails.user?.discordJoinedAt ?? "";
5-
const date = new Date(timestamp);
4+
const timestamp = userDetails.user?.discordJoinedAt;
65

7-
const day = String(date.getDate()).padStart(2, "0");
8-
const month = String(date.getMonth() + 1).padStart(2, "0");
9-
const year = date.getFullYear();
6+
if (timestamp) {
7+
const date = new Date(timestamp);
108

11-
const hours = String(date.getHours()).padStart(2, "0");
12-
const minutes = String(date.getMinutes()).padStart(2, "0");
13-
const seconds = String(date.getSeconds()).padStart(2, "0");
9+
const day = String(date.getDate()).padStart(2, "0");
10+
const month = String(date.getMonth() + 1).padStart(2, "0");
11+
const year = date.getFullYear();
12+
const formattedDate = `${day}/${month}/${year}`;
13+
return formattedDate;
14+
}
1415

15-
const formattedDate = `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`;
16-
return formattedDate;
16+
return "N/A";
1717
}
1818

1919
export function formatUserDetails(userDetails: UserResponseType) {
2020
const convertedTimestamp = convertTimeStamp(userDetails);
2121

2222
const userFullName = `**Full Name :** ${userDetails.user?.first_name} ${userDetails.user?.last_name}`;
23-
const discordJoinedAt = `**RDS Discord Joined at :** ${convertedTimestamp}`;
23+
const discordJoinedAt = `**Joined Server on :** ${convertedTimestamp}`;
2424
const userState = `**State :** ${userDetails.user?.state}`;
2525

2626
return `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;

tests/fixtures/user.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,3 +173,29 @@ export const onboardingUsersResponse = {
173173
message: "Users returned successfully!",
174174
users: users,
175175
};
176+
177+
export const userWithoutDiscordJoinedAt = {
178+
id: "DWcTUhbC5lRXfDjZRp06",
179+
incompleteUserDetails: false,
180+
discordJoinedAt: "",
181+
discordId: "504855562094247953",
182+
github_display_name: "Jyotsna Mehta",
183+
updated_at: 1694888822719,
184+
roles: {
185+
archived: false,
186+
in_discord: true,
187+
member: false,
188+
super_user: false,
189+
archive: false,
190+
},
191+
last_name: "Mehta",
192+
github_id: "j24m",
193+
first_name: "Jyotsna",
194+
username: "jyotsna",
195+
state: "IDLE",
196+
};
197+
198+
export const userWithoutDiscordJoinedAtResponse = {
199+
message: "Users returned successfully!",
200+
user: userWithoutDiscordJoinedAt,
201+
};

tests/unit/utils/formatUserDetails.test.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { UserResponseType } from "../../../src/typeDefinitions/rdsUser";
22
import { formatUserDetails } from "../../../src/utils/formatUserDetails";
3-
import { userResponse } from "../../fixtures/user";
3+
import {
4+
userResponse,
5+
userWithoutDiscordJoinedAtResponse,
6+
} from "../../fixtures/user";
47
import { convertTimeStamp } from "../../../src/utils/formatUserDetails";
58

69
describe("formatUserDetails function", () => {
@@ -14,12 +17,25 @@ describe("formatUserDetails function", () => {
1417
const formattedDetails = formatUserDetails(userResponse).trim();
1518

1619
const userFullName = `**Full Name :** Sunny Sahsi`;
17-
const discordJoinedAt = `**RDS Discord Joined at :** ${convertTimeStamp(
20+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
1821
userResponse
1922
)}`;
2023
const userState = `**State :** ACTIVE`;
2124

2225
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
2326
expect(formattedDetails).toEqual(expectedFormattedDetails);
2427
});
28+
29+
it("should return empty string if discordJoinedAt is undefined", () => {
30+
const formattedDetails = formatUserDetails(
31+
userWithoutDiscordJoinedAtResponse
32+
).trim();
33+
const userFullName = `**Full Name :** Jyotsna Mehta`;
34+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
35+
userWithoutDiscordJoinedAtResponse
36+
)}`;
37+
const userState = `**State :** IDLE`;
38+
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
39+
expect(formattedDetails).toEqual(expectedFormattedDetails);
40+
});
2541
});

0 commit comments

Comments
 (0)