From 012ce6d7a1e4abb2a9c1f2052ea793e7cbc86e74 Mon Sep 17 00:00:00 2001
From: Anuj Chhikara <107175639+AnujChhikara@users.noreply.github.com>
Date: Tue, 29 Oct 2024 10:23:15 +0530
Subject: [PATCH 1/4] Fix: Side panel data not updating when different user
cards are clicked (#900)
* Fix: Side panel data not updating when different user cards are clicked
* renamed the variable
* added tests
* using staging api url for testing
---
__tests__/users/App.test.js | 60 ++++++++++++++++++++++--
users/discord/App.js | 18 +++----
users/discord/components/UsersSection.js | 3 +-
users/discord/utils/util.js | 5 ++
4 files changed, 71 insertions(+), 15 deletions(-)
diff --git a/__tests__/users/App.test.js b/__tests__/users/App.test.js
index 05b36b53..54cbbeeb 100644
--- a/__tests__/users/App.test.js
+++ b/__tests__/users/App.test.js
@@ -37,9 +37,13 @@ describe('App Component', () => {
headers,
body: JSON.stringify({
...filteredUsersData,
- users: filteredUsersData.users.filter(
- (user) => user.roles.in_discord,
- ),
+ ...mockUserData,
+ users: [
+ ...filteredUsersData.users.filter(
+ (user) => user.roles.in_discord,
+ ),
+ ...mockUserData.users.filter((user) => user.roles.in_discord),
+ ],
}),
});
} else if (url === `${API_BASE_URL}/users/search/?verified=true`) {
@@ -49,9 +53,11 @@ describe('App Component', () => {
headers,
body: JSON.stringify({
...filteredUsersData,
- users: filteredUsersData.users.filter((user) => user.discordId),
...mockUserData,
- users: mockUserData.users.filter((user) => user.discordId),
+ users: [
+ ...filteredUsersData.users.filter((user) => user.discordId),
+ ...mockUserData.users.filter((user) => user.discordId),
+ ],
}),
});
} else {
@@ -96,4 +102,48 @@ describe('App Component', () => {
const url = await page.url();
expect(url).toContain('?tab=verified');
});
+
+ it('should handle user card clicks and apply active_tab class to clicked card only in discord tab', async () => {
+ await page.goto(`${BASE_URL}/users/discord/?tab=in_discord`);
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('.user_card[data-key]');
+ const userCardTestIds = await page.$$eval(
+ '[data-testid^="user-card-"]',
+ (cards) => cards.map((card) => card.getAttribute('data-testid')),
+ );
+ for (let i = 0; i < userCardTestIds.length; i++) {
+ const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
+ const userCardElement = await page.$(userCardSelector);
+ await userCardElement.click();
+ await page.waitForTimeout(1000);
+ const isActive = await page.evaluate((selector) => {
+ return document
+ .querySelector(selector)
+ ?.classList.contains('active_tab');
+ }, userCardSelector);
+ expect(isActive).toBe(true);
+ }
+ });
+
+ it('should handle user card clicks and apply active_tab class to clicked card only verified tab', async () => {
+ await page.goto(`${BASE_URL}/users/discord/?tab=verified`);
+ await page.waitForNetworkIdle();
+ await page.waitForSelector('.user_card[data-key]');
+ const userCardTestIds = await page.$$eval(
+ '[data-testid^="user-card-"]',
+ (cards) => cards.map((card) => card.getAttribute('data-testid')),
+ );
+ for (let i = 0; i < userCardTestIds.length; i++) {
+ const userCardSelector = `[data-testid="${userCardTestIds[i]}"]`;
+ const userCardElement = await page.$(userCardSelector);
+ await userCardElement.click();
+ await page.waitForTimeout(1000);
+ const isActive = await page.evaluate((selector) => {
+ return document
+ .querySelector(selector)
+ ?.classList.contains('active_tab');
+ }, userCardSelector);
+ expect(isActive).toBe(true);
+ }
+ });
});
diff --git a/users/discord/App.js b/users/discord/App.js
index 87fa873d..d1b57e0e 100644
--- a/users/discord/App.js
+++ b/users/discord/App.js
@@ -37,16 +37,16 @@ const handleTabNavigation = async (e) => {
}
};
-const handleUserSelected = (e) => {
- const selectedUserId =
- e.target?.getAttribute('data_key') ||
- e.target.parentElement?.getAttribute('data_key');
-
- if (selectedUserId) {
- showUser = usersData[activeTab]?.findIndex(
- (user) => user.id === selectedUserId,
+const handleUserSelected = (userId) => {
+ if (userId) {
+ const selectedUserIndex = usersData[activeTab]?.findIndex(
+ (user) => user.id === userId,
);
- rerender(App(), window['root']);
+
+ if (selectedUserIndex !== -1) {
+ showUser = selectedUserIndex;
+ rerender(App(), window['root']);
+ }
}
};
diff --git a/users/discord/components/UsersSection.js b/users/discord/components/UsersSection.js
index 4d0ac94b..51773f79 100644
--- a/users/discord/components/UsersSection.js
+++ b/users/discord/components/UsersSection.js
@@ -5,7 +5,7 @@ export const UsersSection = ({ users, showUser, handleUserSelected }) => {
'aside',
{
class: 'users_section',
- onClick: handleUserSelected,
+
'data-testid': 'users-section',
},
users?.map((user) => {
@@ -17,6 +17,7 @@ export const UsersSection = ({ users, showUser, handleUserSelected }) => {
}`,
'data-testid': `user-card-${user.id}`,
'data-key': user.id,
+ onclick: () => handleUserSelected(user.id),
},
[
createElement('img', {
diff --git a/users/discord/utils/util.js b/users/discord/utils/util.js
index 83cd40e5..1937147e 100644
--- a/users/discord/utils/util.js
+++ b/users/discord/utils/util.js
@@ -1,3 +1,8 @@
+const API_BASE_URL =
+ window.location.hostname === 'localhost'
+ ? 'https://staging-api.realdevsquad.com'
+ : window.API_BASE_URL;
+
export const getUsers = async (tab) => {
let URL = {
in_discord: `${API_BASE_URL}/users/search/?role=in_discord`,
From 699428473503c5b769643022dfa699a5a5adfe49 Mon Sep 17 00:00:00 2001
From: Prashant Kumar <80661803+prashant67690@users.noreply.github.com>
Date: Tue, 29 Oct 2024 23:57:01 +0530
Subject: [PATCH 2/4] removed the unwanted pagination div (#902)
---
.../users/user-management-home-screen.test.js | 9 --
users/constants.js | 3 -
users/index.html | 4 -
users/script.js | 93 ++++---------------
4 files changed, 16 insertions(+), 93 deletions(-)
diff --git a/__tests__/users/user-management-home-screen.test.js b/__tests__/users/user-management-home-screen.test.js
index 66f7b60c..f50242eb 100644
--- a/__tests__/users/user-management-home-screen.test.js
+++ b/__tests__/users/user-management-home-screen.test.js
@@ -9,9 +9,6 @@ describe('Tests the User Management User Listing Screen', () => {
let tileViewBtn;
let tableViewBtn;
let userSearchElement;
- let paginationElement;
- let prevBtn;
- let nextBtn;
jest.setTimeout(60000);
beforeAll(async () => {
@@ -71,9 +68,6 @@ describe('Tests the User Management User Listing Screen', () => {
tileViewBtn = await page.$('#tile-view-btn');
tableViewBtn = await page.$('#table-view-btn');
userSearchElement = await page.$('#user-search');
- paginationElement = await page.$('#pagination');
- prevBtn = await page.$('#prevButton');
- nextBtn = await page.$('#nextButton');
});
afterAll(async () => {
@@ -85,9 +79,6 @@ describe('Tests the User Management User Listing Screen', () => {
expect(tileViewBtn).toBeTruthy();
expect(tableViewBtn).toBeTruthy();
expect(userSearchElement).toBeTruthy();
- expect(paginationElement).toBeTruthy();
- expect(prevBtn).toBeTruthy();
- expect(nextBtn).toBeTruthy();
});
it('Check the UI interactions of tile view and table view button.', async () => {
diff --git a/users/constants.js b/users/constants.js
index 78d86831..bf003d1b 100644
--- a/users/constants.js
+++ b/users/constants.js
@@ -8,9 +8,6 @@ const TILE_VIEW_BTN = 'tile-view-btn';
const TABLE_VIEW_BTN = 'table-view-btn';
const USER_SEARCH_ELEMENT = 'user-search';
const DEFAULT_AVATAR = '/images/avatar.png';
-const PAGINATION_ELEMENT = 'pagination';
-const PREV_BUTTON = 'prevButton';
-const NEXT_BUTTON = 'nextButton';
const USER_FETCH_COUNT = 100;
const NONE = 'NONE';
const OOO = 'OOO';
diff --git a/users/index.html b/users/index.html
index 5bae7582..b1e65323 100644
--- a/users/index.html
+++ b/users/index.html
@@ -72,10 +72,6 @@