Skip to content

Commit c5d04ad

Browse files
Added username & userId to /user command (#244)
* added username & userId to /user command * corrected dummy user * corrected formatting * user details format correction * added feature flag
1 parent 83c4bee commit c5d04ad

File tree

6 files changed

+80
-25
lines changed

6 files changed

+80
-25
lines changed

src/constants/commands.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ export const USER = {
9696
type: 6,
9797
required: true,
9898
},
99+
{
100+
name: "dev",
101+
description: "want to see extra details?",
102+
type: 5,
103+
require: false,
104+
},
99105
],
100106
};
101107

src/controllers/baseHandler.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,10 @@ export async function baseHandler(
154154

155155
case getCommandName(USER): {
156156
const data = message.data?.options as Array<messageRequestDataOptions>;
157-
return await userCommand(data[0].value, env);
157+
const dev = data.find(
158+
(item) => item.name === "dev"
159+
) as unknown as DevFlag;
160+
return await userCommand(data[0].value, env, dev);
158161
}
159162
default: {
160163
return commandNotFound();

src/controllers/userCommand.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,17 @@ 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 { DevFlag } from "../typeDefinitions/filterUsersByRole";
56
import { USER_NOT_FOUND } from "../constants/responses";
67

7-
export async function userCommand(discordId: string, env: env) {
8+
export async function userCommand(discordId: string, env: env, dev?: DevFlag) {
89
try {
10+
const flag = dev?.value || false;
911
const userDetails = await getUserDetails(discordId);
1012
if (!userDetails.user?.discordId) {
1113
return discordTextResponse(USER_NOT_FOUND);
1214
}
13-
const formattedUserDetails = formatUserDetails(userDetails);
15+
const formattedUserDetails = formatUserDetails(userDetails, flag);
1416
return discordTextResponse(formattedUserDetails);
1517
} catch (error) {
1618
return discordTextResponse("Trouble in fetching user details.");

src/utils/formatUserDetails.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,20 @@ export function convertTimeStamp(userDetails: UserResponseType) {
1616
return "N/A";
1717
}
1818

19-
export function formatUserDetails(userDetails: UserResponseType) {
19+
export function formatUserDetails(
20+
userDetails: UserResponseType,
21+
flag: boolean
22+
) {
2023
const convertedTimestamp = convertTimeStamp(userDetails);
2124

25+
const userId = `**User Id :** ${userDetails.user?.id}`;
26+
const userName = `**User Name :** ${userDetails.user?.username}`;
2227
const userFullName = `**Full Name :** ${userDetails.user?.first_name} ${userDetails.user?.last_name}`;
23-
const discordJoinedAt = `**Joined Server on :** ${convertedTimestamp}`;
2428
const userState = `**State :** ${userDetails.user?.state}`;
29+
const discordJoinedAt = `**Joined Server on :** ${convertedTimestamp}`;
30+
31+
if (!flag)
32+
return `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
2533

26-
return `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
34+
return `## User Details\n${userId}\n${userName}\n${userFullName}\n${userState}\n${discordJoinedAt}`;
2735
}

tests/fixtures/user.ts

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ export const user = {
33
incompleteUserDetails: false,
44
discordJoinedAt: "2023-08-08T11:40:42.522000+00:00",
55
discordId: "858838385330487336",
6-
github_display_name: "Sunny Sahsi",
6+
github_display_name: "John Doe",
77
updated_at: 1694888822719,
88
roles: {
99
archived: false,
@@ -12,10 +12,10 @@ export const user = {
1212
super_user: false,
1313
archive: false,
1414
},
15-
last_name: "Sahsi",
16-
github_id: "sahsisunny",
17-
first_name: "Sunny",
18-
username: "sunny",
15+
last_name: "Doe",
16+
github_id: "johndoe",
17+
first_name: "John",
18+
username: "johndoe",
1919
state: "ACTIVE",
2020
};
2121

@@ -179,7 +179,7 @@ export const userWithoutDiscordJoinedAt = {
179179
incompleteUserDetails: false,
180180
discordJoinedAt: "",
181181
discordId: "504855562094247953",
182-
github_display_name: "Jyotsna Mehta",
182+
github_display_name: "John Doe",
183183
updated_at: 1694888822719,
184184
roles: {
185185
archived: false,
@@ -188,10 +188,10 @@ export const userWithoutDiscordJoinedAt = {
188188
super_user: false,
189189
archive: false,
190190
},
191-
last_name: "Mehta",
192-
github_id: "j24m",
193-
first_name: "Jyotsna",
194-
username: "jyotsna",
191+
last_name: "Doe",
192+
github_id: "johndoe",
193+
first_name: "John",
194+
username: "johndoe",
195195
state: "IDLE",
196196
};
197197

tests/unit/utils/formatUserDetails.test.ts

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,69 @@ import { convertTimeStamp } from "../../../src/utils/formatUserDetails";
99
describe("formatUserDetails function", () => {
1010
it("Should return a string", () => {
1111
const userData: UserResponseType = userResponse;
12-
const formattedUserDetails = formatUserDetails(userData);
12+
const formattedUserDetails = formatUserDetails(userData, true);
1313
expect(typeof formattedUserDetails).toBe("string");
1414
});
1515

16-
it("should format user details correctly", () => {
17-
const formattedDetails = formatUserDetails(userResponse).trim();
16+
it("should format user details correctly in dev mode", () => {
17+
const formattedDetails = formatUserDetails(userResponse, true).trim();
1818

19-
const userFullName = `**Full Name :** Sunny Sahsi`;
19+
const userId = `**User Id :** iODXB6ns8jaZB9p0XlBw`;
20+
const userName = `**User Name :** johndoe`;
21+
const userFullName = `**Full Name :** John Doe`;
22+
const userState = `**State :** ACTIVE`;
2023
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
2124
userResponse
2225
)}`;
26+
27+
const expectedFormattedDetails = `## User Details\n${userId}\n${userName}\n${userFullName}\n${userState}\n${discordJoinedAt}`;
28+
expect(formattedDetails).toEqual(expectedFormattedDetails);
29+
});
30+
31+
it("should format user details correctly when not in dev mode", () => {
32+
const formattedDetails = formatUserDetails(userResponse, false).trim();
33+
34+
const userFullName = `**Full Name :** John Doe`;
2335
const userState = `**State :** ACTIVE`;
36+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
37+
userResponse
38+
)}`;
2439

25-
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
40+
const expectedFormattedDetails = `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
2641
expect(formattedDetails).toEqual(expectedFormattedDetails);
2742
});
2843

29-
it("should return empty string if discordJoinedAt is undefined", () => {
44+
it("should return empty string if discordJoinedAt is undefined in dev mode", () => {
3045
const formattedDetails = formatUserDetails(
31-
userWithoutDiscordJoinedAtResponse
46+
userWithoutDiscordJoinedAtResponse,
47+
true
3248
).trim();
33-
const userFullName = `**Full Name :** Jyotsna Mehta`;
49+
50+
const userId = `**User Id :** DWcTUhbC5lRXfDjZRp06`;
51+
const userName = `**User Name :** johndoe`;
52+
const userFullName = `**Full Name :** John Doe`;
53+
const userState = `**State :** IDLE`;
3454
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
3555
userWithoutDiscordJoinedAtResponse
3656
)}`;
57+
58+
const expectedFormattedDetails = `## User Details\n${userId}\n${userName}\n${userFullName}\n${userState}\n${discordJoinedAt}`;
59+
expect(formattedDetails).toEqual(expectedFormattedDetails);
60+
});
61+
62+
it("should return empty string if discordJoinedAt is undefined when not in dev mode", () => {
63+
const formattedDetails = formatUserDetails(
64+
userWithoutDiscordJoinedAtResponse,
65+
false
66+
).trim();
67+
68+
const userFullName = `**Full Name :** John Doe`;
3769
const userState = `**State :** IDLE`;
38-
const expectedFormattedDetails = `## User Details\n${userFullName}\n${discordJoinedAt}\n${userState}`;
70+
const discordJoinedAt = `**Joined Server on :** ${convertTimeStamp(
71+
userWithoutDiscordJoinedAtResponse
72+
)}`;
73+
74+
const expectedFormattedDetails = `## User Details\n${userFullName}\n${userState}\n${discordJoinedAt}`;
3975
expect(formattedDetails).toEqual(expectedFormattedDetails);
4076
});
4177
});

0 commit comments

Comments
 (0)