From a4dd81598c1104e6c8d15818ec9acbe761761d7f Mon Sep 17 00:00:00 2001 From: Ka Hung Lee Date: Fri, 9 Jun 2023 19:08:26 -0700 Subject: [PATCH 01/23] Updated all PASS-relevant containers to use PASS prefix; Updated functions that uses usernames to use oidcIssuer to create webId --- src/components/Clients/AddClient.jsx | 7 ++- .../Form/CheckAclPermsDocContainerForm.jsx | 4 +- src/components/Form/SetAclPermissionForm.jsx | 4 +- .../Form/SetAclPermsDocContainerForm.jsx | 8 +--- src/model-helpers/UserList.js | 4 +- src/utils/index.js | 5 +- src/utils/network/session-core.js | 48 ++++++++----------- src/utils/network/session-helper.js | 18 +++---- test/model-helpers/UserList.test.js | 4 +- test/utils/session-core.test.js | 18 +++---- test/utils/session-helper.test.js | 14 +++--- 11 files changed, 63 insertions(+), 71 deletions(-) diff --git a/src/components/Clients/AddClient.jsx b/src/components/Clients/AddClient.jsx index 8a26c879a..4893377ef 100644 --- a/src/components/Clients/AddClient.jsx +++ b/src/components/Clients/AddClient.jsx @@ -3,7 +3,7 @@ import React, { useContext, useState } from 'react'; // Inrupt Library Imports import { useSession } from '@inrupt/solid-ui-react'; // Utility Imports -import { runNotification, SOLID_IDENTITY_PROVIDER } from '../../utils'; +import { runNotification, oidcIssuer } from '../../utils'; import { createUser } from '../../model-helpers/User'; // Custom Hook Imports import { useStatusNotification, useField } from '../../hooks'; @@ -21,7 +21,7 @@ import FormSection from '../Form/FormSection'; */ const renderWebId = (username) => { - const oidcProvider = SOLID_IDENTITY_PROVIDER.split('//')[1]; + const oidcProvider = oidcIssuer.split('//')[1]; const template = ['https://', `.${oidcProvider}profile/card#me`]; return `${template[0]}${username}${template[1]}`; }; @@ -145,8 +145,7 @@ const AddClient = () => {


diff --git a/src/components/Form/CheckAclPermsDocContainerForm.jsx b/src/components/Form/CheckAclPermsDocContainerForm.jsx index e4c363ab5..af2823349 100644 --- a/src/components/Form/CheckAclPermsDocContainerForm.jsx +++ b/src/components/Form/CheckAclPermsDocContainerForm.jsx @@ -8,7 +8,7 @@ import Button from '@mui/material/Button'; import FormControl from '@mui/material/FormControl'; import TextField from '@mui/material/TextField'; // Utility Imports -import { SOLID_IDENTITY_PROVIDER, checkContainerPermission, runNotification } from '../../utils'; +import { oidcIssuer, checkContainerPermission, runNotification } from '../../utils'; // Custom Hook Imports import { useField, useStatusNotification } from '../../hooks'; // Context Imports @@ -62,7 +62,7 @@ const CheckAclPermsDocContainerForm = () => { } if ( - `https://${podUsername}.${SOLID_IDENTITY_PROVIDER.split('/')[2]}/` === + `https://${podUsername}.${oidcIssuer.split('/')[2]}/` === String(session.info.webId.split('profile')[0]) ) { runNotification( diff --git a/src/components/Form/SetAclPermissionForm.jsx b/src/components/Form/SetAclPermissionForm.jsx index 1f84f10ab..4b6dafc75 100644 --- a/src/components/Form/SetAclPermissionForm.jsx +++ b/src/components/Form/SetAclPermissionForm.jsx @@ -13,7 +13,7 @@ import RadioGroup from '@mui/material/RadioGroup'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; // Utility Imports -import { SOLID_IDENTITY_PROVIDER, runNotification, setDocAclPermission } from '../../utils'; +import { oidcIssuer, runNotification, setDocAclPermission } from '../../utils'; // Custom Hook Imports import { useField, useStatusNotification } from '../../hooks'; // Context Imports @@ -69,7 +69,7 @@ const SetAclPermissionForm = () => { } if ( - `https://${podUsername}.${SOLID_IDENTITY_PROVIDER.split('/')[2]}/` === + `https://${podUsername}.${oidcIssuer.split('/')[2]}/` === String(session.info.webId.split('profile')[0]) ) { runNotification( diff --git a/src/components/Form/SetAclPermsDocContainerForm.jsx b/src/components/Form/SetAclPermsDocContainerForm.jsx index 9e1a8b28e..2312fae20 100644 --- a/src/components/Form/SetAclPermsDocContainerForm.jsx +++ b/src/components/Form/SetAclPermsDocContainerForm.jsx @@ -13,11 +13,7 @@ import RadioGroup from '@mui/material/RadioGroup'; import TextField from '@mui/material/TextField'; import Typography from '@mui/material/Typography'; // Utility Imports -import { - SOLID_IDENTITY_PROVIDER, - runNotification, - setDocContainerAclPermission -} from '../../utils'; +import { oidcIssuer, runNotification, setDocContainerAclPermission } from '../../utils'; // Custom Hook Imports import { useField, useStatusNotification } from '../../hooks'; // Context Imports @@ -72,7 +68,7 @@ const SetAclPermsDocContainerForm = () => { } if ( - `https://${podUsername}.${SOLID_IDENTITY_PROVIDER.split('/')[2]}/` === + `https://${podUsername}.${oidcIssuer.split('/')[2]}/` === String(session.info.webId.split('profile')[0]) ) { runNotification( diff --git a/src/model-helpers/UserList.js b/src/model-helpers/UserList.js index 8cf78f0b2..58a9c855b 100644 --- a/src/model-helpers/UserList.js +++ b/src/model-helpers/UserList.js @@ -155,7 +155,7 @@ export const removeUser = async (user, session, { userList, dataset, listUrl }) * @returns {object} An new userListObject containing any updates */ export const loadUserList = async (session, podUrl) => { - const userListUrl = `${podUrl}Users/userlist.ttl`; + const userListUrl = `${podUrl}PASS_Users/userlist.ttl`; let dataset; let userList; try { @@ -169,6 +169,6 @@ export const loadUserList = async (session, podUrl) => { userList = []; await setDocAclForUser(session, userListUrl, 'create', session.info.webId); } - const listUrl = `${podUrl}Users/userlist.ttl`; + const listUrl = `${podUrl}PASS_Users/userlist.ttl`; return { dataset, userList, listUrl }; }; diff --git a/src/utils/index.js b/src/utils/index.js index 4063d5d9d..c6e6ec87a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -26,7 +26,7 @@ import { createPublicContainer, createInbox } from './network/session-core'; -import { SOLID_IDENTITY_PROVIDER } from './network/session-helper'; +import { SOLID_IDENTITY_PROVIDER, oidcIssuer } from './network/session-helper'; import makeHandleFormSubmission from './frontend/FormSubmissionHelper'; export { @@ -47,5 +47,6 @@ export { createOutbox, getMessageTTL, createPublicContainer, - createInbox + createInbox, + oidcIssuer }; diff --git a/src/utils/network/session-core.js b/src/utils/network/session-core.js index d7f03b5c6..dbc1d679b 100644 --- a/src/utils/network/session-core.js +++ b/src/utils/network/session-core.js @@ -20,12 +20,12 @@ import { setDocAclForUser, createResourceTtlFile, updateTTLFile, - SOLID_IDENTITY_PROVIDER, getUserProfileName, saveMessageTTL, parseMessageTTL, buildMessageTTL, - setDocAclForPublic + setDocAclForPublic, + oidcIssuer } from './session-helper'; import { getUserSigningKey, signDocumentTtlFile } from '../cryptography/credentials-helper'; @@ -69,9 +69,7 @@ import { getUserSigningKey, signDocumentTtlFile } from '../cryptography/credenti */ export const setDocAclPermission = async (session, fileType, permissions, otherPodUsername) => { const documentUrl = getContainerUrl(session, fileType, INTERACTION_TYPES.SELF); - const webId = `https://${otherPodUsername}.${ - SOLID_IDENTITY_PROVIDER.split('/')[2] - }/profile/card#me`; + const webId = `https://${otherPodUsername}.${oidcIssuer.split('/')[2]}/profile/card#me`; await setDocAclForUser(session, documentUrl, 'update', webId, permissions); }; @@ -91,14 +89,12 @@ export const setDocContainerAclPermission = async (session, permissions, otherPo const containerUrl = getContainerUrl(session, 'Documents', INTERACTION_TYPES.SELF); const urlsToSet = [ containerUrl, - `${containerUrl}Bank%20Statement/`, - `${containerUrl}Passport/`, - `${containerUrl}Drivers%20License/` + `${containerUrl}PASS_Bank_Statement/`, + `${containerUrl}PASS_Passport/`, + `${containerUrl}PASS_Drivers_License/` ]; - const webId = `https://${otherPodUsername}.${ - SOLID_IDENTITY_PROVIDER.split('/')[2] - }/profile/card#me`; + const webId = `https://${otherPodUsername}.${oidcIssuer.split('/')[2]}/profile/card#me`; urlsToSet.forEach(async (url) => { await setDocAclForUser(session, url, 'update', webId, permissions); @@ -142,12 +138,12 @@ export const uploadDocument = async ( containerUrl = getContainerUrl(session, fileObject.type, INTERACTION_TYPES.SELF); } else { containerUrl = getContainerUrl(session, 'Documents', INTERACTION_TYPES.CROSS, otherPodUsername); - containerUrl = `${containerUrl}${fileObject.type.replace("'", '').replace(' ', '%20')}/`; + containerUrl = `${containerUrl}PASS_${fileObject.type.replace("'", '').replace(' ', '_')}/`; } await createContainerAt(containerUrl, { fetch: session.fetch }); - const documentUrl = `${containerUrl}${fileName.replace(' ', '%20')}`; + const documentUrl = `${containerUrl}${fileName.replace(' ', '_')}`; const datasetFromUrl = await getSolidDataset(containerUrl, { fetch: session.fetch }); const ttlFileExists = hasTTLFiles(datasetFromUrl); @@ -212,7 +208,7 @@ export const updateDocument = async (session, uploadType, fileObject, otherPodUs containerUrl = getContainerUrl(session, fileObject.type, INTERACTION_TYPES.SELF); } else { containerUrl = getContainerUrl(session, 'Documents', INTERACTION_TYPES.CROSS, otherPodUsername); - containerUrl = `${containerUrl}${fileObject.type.replace(' ', '%20')}/`; + containerUrl = `${containerUrl}${fileObject.type.replace(' ', '_')}/`; } const documentUrl = `${containerUrl}${fileName}`; @@ -275,8 +271,8 @@ export const getDocuments = async (session, fileType, fetchType, otherPodUsernam */ export const checkContainerPermission = async (session, otherPodUsername) => { const documentsContainerUrl = `https://${otherPodUsername}.${ - SOLID_IDENTITY_PROVIDER.split('/')[2] - }/Documents/`; + oidcIssuer.split('/')[2] + }/PASS_Documents/`; try { await getSolidDataset(documentsContainerUrl, { fetch: session.fetch }); @@ -342,7 +338,7 @@ export const deleteDocumentContainer = async (session, documentUrl) => { */ export const createDocumentContainer = async (session, podUrl) => { - const userContainerUrl = `${podUrl}Documents/`; + const userContainerUrl = `${podUrl}PASS_Documents/`; try { await getSolidDataset(userContainerUrl, { fetch: session.fetch }); @@ -350,9 +346,9 @@ export const createDocumentContainer = async (session, podUrl) => { await createContainerAt(userContainerUrl, { fetch: session.fetch }); const createContainerList = [ - `${userContainerUrl}Bank%20Statement/`, - `${userContainerUrl}Passport/`, - `${userContainerUrl}Drivers%20License/` + `${userContainerUrl}PASS_Bank_Statement/`, + `${userContainerUrl}PASS_Passport/`, + `${userContainerUrl}PASS_Drivers_License/` ]; createContainerList.forEach(async (url) => { @@ -430,7 +426,7 @@ export const createPublicContainer = async (session, podUrl) => { */ export const getMessageTTL = async (session, boxType, listMessages, podUrl) => { - const messageBoxContainerUrl = `${podUrl}${boxType.toLocaleLowerCase()}/`; + const messageBoxContainerUrl = `${podUrl}PASS_${boxType}/`; let messageList = []; try { const solidDataset = await getSolidDataset(messageBoxContainerUrl, { @@ -485,12 +481,10 @@ export const sendMessageTTL = async (session, messageObject, podUrl) => { INTERACTION_TYPES.CROSS, recipientUsername ); - const outboxUrl = `${podUrl}outbox/`; + const outboxUrl = `${podUrl}PASS_Outbox/`; const senderUsername = podUrl.split('/')[2].split('.')[0]; - const recipientWebId = `https://${recipientUsername}.${ - SOLID_IDENTITY_PROVIDER.split('/')[2] - }/profile/card#me`; + const recipientWebId = `https://${recipientUsername}.${oidcIssuer.split('/')[2]}/profile/card#me`; const senderName = await getUserProfileName(session, session.info.webId); let recipientName; @@ -539,7 +533,7 @@ export const sendMessageTTL = async (session, messageObject, podUrl) => { */ export const createOutbox = async (session, podUrl) => { - const outboxContainerUrl = `${podUrl}outbox/`; + const outboxContainerUrl = `${podUrl}PASS_Outbox/`; try { await getSolidDataset(outboxContainerUrl, { fetch: session.fetch }); @@ -564,7 +558,7 @@ export const createOutbox = async (session, podUrl) => { */ export const createInbox = async (session, podUrl) => { - const inboxContainerUrl = `${podUrl}inbox/`; + const inboxContainerUrl = `${podUrl}PASS_Inbox/`; try { await getSolidDataset(inboxContainerUrl, { fetch: session.fetch }); diff --git a/src/utils/network/session-helper.js b/src/utils/network/session-helper.js index 95e90f9f3..14bab8780 100644 --- a/src/utils/network/session-helper.js +++ b/src/utils/network/session-helper.js @@ -74,6 +74,8 @@ const OIDUrl = : import.meta.env.VITE_SOLID_IDENTITY_PROVIDER_PRODUCTION; export const SOLID_IDENTITY_PROVIDER = OIDUrl.replace(/\r/g, ''); +export const oidcIssuer = localStorage.getItem('oidcIssuer') ?? SOLID_IDENTITY_PROVIDER; + /** * Function that helps place uploaded file from user into the user's Pod via a * Solid container @@ -160,23 +162,23 @@ export const getContainerUrl = (session, fileType, fetchType, otherPodUsername) const POD_URL = fetchType === 'self' ? String(session.info.webId.split('profile')[0]) - : `https://${otherPodUsername}.${SOLID_IDENTITY_PROVIDER.split('/')[2]}/`; + : `https://${otherPodUsername}.${oidcIssuer.split('/')[2]}/`; switch (fileType) { case 'Bank Statement': - return `${POD_URL}Bank%20Statement/`; + return `${POD_URL}PASS_Bank_Statement/`; case 'Passport': - return `${POD_URL}Passport/`; + return `${POD_URL}PASS_Passport/`; case "Driver's License": - return `${POD_URL}Drivers%20License/`; + return `${POD_URL}PASS_Drivers_License/`; case 'Users': - return `${POD_URL}Users/`; + return `${POD_URL}PASS_Users/`; case 'Documents': - return `${POD_URL}Documents/`; + return `${POD_URL}PASS_Documents/`; case 'Inbox': - return `${POD_URL}inbox/`; + return `${POD_URL}PASS_Inbox/`; case 'Outbox': - return `${POD_URL}outbox/`; + return `${POD_URL}PASS_Outbox/`; case 'Public': return `${POD_URL}public/`; default: diff --git a/test/model-helpers/UserList.test.js b/test/model-helpers/UserList.test.js index cb392aed8..587d7097c 100644 --- a/test/model-helpers/UserList.test.js +++ b/test/model-helpers/UserList.test.js @@ -47,7 +47,7 @@ const secondUser = { }; let mockSession; const mockUserList = [firstUser, secondUser]; -const mockUrl = 'https://james.example.com/Users/userlist.ttl'; +const mockUrl = 'https://james.example.com/PASS_Users/userlist.ttl'; const mockDataset = makeMockUserListDataset(mockUserList, mockUrl); const mockUserListObject = { userList: mockUserList, @@ -83,7 +83,7 @@ describe('loadUserList', () => { await loadUserList(mockSession, 'https://james.example.com/'); expect(saveSolidDatasetAt).toBeCalledWith( - 'https://james.example.com/Users/userlist.ttl', + 'https://james.example.com/PASS_Users/userlist.ttl', expect.objectContaining({ type: 'Dataset' }), expect.objectContaining({ fetch: mockSession.fetch }) ); diff --git a/test/utils/session-core.test.js b/test/utils/session-core.test.js index 26ed6cd62..57d27dbe1 100644 --- a/test/utils/session-core.test.js +++ b/test/utils/session-core.test.js @@ -24,7 +24,7 @@ vi.mock('../../src/utils/network/session-helper', async () => { const actual = await vi.importActual('../../src/utils/network/session-helper'); return { ...actual, - SOLID_IDENTITY_PROVIDER: 'https://example.com/' + oidcIssuer: 'https://example.com/' }; }); @@ -45,7 +45,7 @@ describe('checkContainerPermission', () => { it('returns containerUrl if getSolidDataset resolves', async () => { const results = await checkContainerPermission(session, otherPodUsername); - expect(results).toBe('https://pod2.example.com/Documents/'); + expect(results).toBe('https://pod2.example.com/PASS_Documents/'); }); it('throws an error if getSolidDataset is rejected', async () => { @@ -72,15 +72,15 @@ describe('deleteDocumentFile', () => { it('returns containerUrl after deleting all files inside', async () => { vi.spyOn(sessionHelpers, 'getContainerUrlAndFiles').mockReturnValue([ - 'https://pod.example.com/Passport/', + 'https://pod.example.com/PASS_Passport/', [ - { url: 'https://pod.example.com/Passport/document.ttl' }, - { url: 'https://pod.example.com/Passport/uploaded.pdf' } + { url: 'https://pod.example.com/PASS_Passport/document.ttl' }, + { url: 'https://pod.example.com/PASS_Passport/uploaded.pdf' } ] ]); const containerUrl = await deleteDocumentFile(session, 'Passport'); - expect(containerUrl).toBe('https://pod.example.com/Passport/'); + expect(containerUrl).toBe('https://pod.example.com/PASS_Passport/'); }); }); @@ -100,7 +100,7 @@ describe('getDocuments', () => { it('returns documentUrl if getSolidDataset resolves', async () => { const results = await getDocuments(session, 'Passport', 'self'); - expect(results).toBe('https://pod.example.com/Passport/'); + expect(results).toBe('https://pod.example.com/PASS_Passport/'); }); it('throws an error if getSolidDataset is rejected', async () => { @@ -154,7 +154,7 @@ describe('createInbox', () => { vi.clearAllMocks(); }); - const inboxContainerUrl = `${mockPodUrl}inbox/`; + const inboxContainerUrl = `${mockPodUrl}PASS_Inbox/`; it('just runs getSolidDataset if container exist', async () => { await createInbox(session, inboxContainerUrl); @@ -186,7 +186,7 @@ describe('createOutbox', () => { vi.clearAllMocks(); }); - const outboxContainerUrl = `${mockPodUrl}outbox/`; + const outboxContainerUrl = `${mockPodUrl}PASS_Outbox/`; it('just runs getSolidDataset if container exist', async () => { await createOutbox(session, outboxContainerUrl); diff --git a/test/utils/session-helper.test.js b/test/utils/session-helper.test.js index d4c225bf5..69b114d57 100644 --- a/test/utils/session-helper.test.js +++ b/test/utils/session-helper.test.js @@ -80,37 +80,37 @@ describe('getContainerUrl', () => { it('Returns the correct container URL to Bank Statement', () => { const containerUrl = getContainerUrl(session, 'Bank Statement', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}Bank%20Statement/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Bank_Statement/`); }); it('Returns the correct container URL to Passport', () => { const containerUrl = getContainerUrl(session, 'Passport', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}Passport/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Passport/`); }); it("Returns the correct container URL to Driver's License", () => { const containerUrl = getContainerUrl(session, "Driver's License", INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}Drivers%20License/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Drivers_License/`); }); it('Returns the correct container URL to Users', () => { const containerUrl = getContainerUrl(session, 'Users', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}Users/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Users/`); }); it('Returns the correct container URL to Documents', () => { const containerUrl = getContainerUrl(session, 'Documents', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}Documents/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Documents/`); }); it('Returns the correct container URL to inbox', () => { const containerUrl = getContainerUrl(session, 'Inbox', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}inbox/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Inbox/`); }); it('Returns the correct container URL to outbox', () => { const containerUrl = getContainerUrl(session, 'Outbox', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}outbox/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Outbox/`); }); it('Returns the correct container URL to public', () => { From ecee0226bd3f55e7653919d2747aa6fb9acd7a51 Mon Sep 17 00:00:00 2001 From: Ka Hung Lee Date: Fri, 9 Jun 2023 19:30:49 -0700 Subject: [PATCH 02/23] Optimized getContainerUrl; Replaced public with PASS_Public; Corrected test with oidc snapshot --- src/model-helpers/User.js | 4 ++-- src/utils/network/session-core.js | 2 +- src/utils/network/session-helper.js | 27 +++++----------------- test/contexts/SignedInUserContext.test.jsx | 2 +- test/model-helpers/User.test.js | 6 ++--- test/utils/session-core.test.js | 2 +- test/utils/session-helper.test.js | 2 +- 7 files changed, 15 insertions(+), 30 deletions(-) diff --git a/src/model-helpers/User.js b/src/model-helpers/User.js index 903104725..718914e6c 100644 --- a/src/model-helpers/User.js +++ b/src/model-helpers/User.js @@ -37,7 +37,7 @@ import { setDocAclForUser } from '../utils/network/session-helper'; * @returns {Promise} Promise - Updates last active time of user to lastActive.ttl */ export const updateUserActivity = async (session, podUrl) => { - const activityDocUrl = `${podUrl}public/active.ttl`; + const activityDocUrl = `${podUrl}PASS_Public/active.ttl`; const accessObject = { read: true, append: true, @@ -98,7 +98,7 @@ export const updateUserActivity = async (session, podUrl) => { * @returns {Promise} last time the user was active in PASS */ const loadUserActivity = async (podUrl, session) => { - const activityUrl = `${podUrl}public/active.ttl`; + const activityUrl = `${podUrl}PASS_Public/active.ttl`; try { const solidDataset = await getSolidDataset(activityUrl, { fetch: session.fetch diff --git a/src/utils/network/session-core.js b/src/utils/network/session-core.js index dbc1d679b..8ec64803a 100644 --- a/src/utils/network/session-core.js +++ b/src/utils/network/session-core.js @@ -392,7 +392,7 @@ export const createDocumentContainer = async (session, podUrl) => { */ export const createPublicContainer = async (session, podUrl) => { - const publicContainerUrl = `${podUrl}public/`; + const publicContainerUrl = `${podUrl}PASS_Public/`; try { await getSolidDataset(publicContainerUrl, { fetch: session.fetch }); diff --git a/src/utils/network/session-helper.js b/src/utils/network/session-helper.js index 14bab8780..1b6051d44 100644 --- a/src/utils/network/session-helper.js +++ b/src/utils/network/session-helper.js @@ -150,7 +150,7 @@ export const getContainerUrlAndFiles = (solidDataset) => { * @memberof utils * @function getContainerUrl * @param {Session} session - Solid's Session Object (see {@link Session}) - * @param {string} fileType - Type of document + * @param {string} containerType - Type of document * @param {string} fetchType - Type of fetch (to own Pod, or "self" or to * other Pods, or "cross") * @param {URL} otherPodUsername - Username to other user's Pod or empty string @@ -158,32 +158,17 @@ export const getContainerUrlAndFiles = (solidDataset) => { * the file is located in or null, if container doesn't exist */ -export const getContainerUrl = (session, fileType, fetchType, otherPodUsername) => { +export const getContainerUrl = (session, containerType, fetchType, otherPodUsername) => { const POD_URL = fetchType === 'self' ? String(session.info.webId.split('profile')[0]) : `https://${otherPodUsername}.${oidcIssuer.split('/')[2]}/`; - switch (fileType) { - case 'Bank Statement': - return `${POD_URL}PASS_Bank_Statement/`; - case 'Passport': - return `${POD_URL}PASS_Passport/`; - case "Driver's License": - return `${POD_URL}PASS_Drivers_License/`; - case 'Users': - return `${POD_URL}PASS_Users/`; - case 'Documents': - return `${POD_URL}PASS_Documents/`; - case 'Inbox': - return `${POD_URL}PASS_Inbox/`; - case 'Outbox': - return `${POD_URL}PASS_Outbox/`; - case 'Public': - return `${POD_URL}public/`; - default: - return null; + if (containerType.split(' ').length > 1) { + return `${POD_URL}PASS_${containerType.replace(' ', '_')}/`; } + + return `${POD_URL}PASS_${containerType}/`; }; /** diff --git a/test/contexts/SignedInUserContext.test.jsx b/test/contexts/SignedInUserContext.test.jsx index 60ad48d57..1aefcf1b9 100644 --- a/test/contexts/SignedInUserContext.test.jsx +++ b/test/contexts/SignedInUserContext.test.jsx @@ -49,7 +49,7 @@ describe('SignedInUserContext', () => { .addDatetime(RDF_PREDICATES.dateModified, new Date()) .build(); - const dataset = mockSolidDatasetFrom('https://example.com/pod/public/active.ttl'); + const dataset = mockSolidDatasetFrom('https://example.com/pod/PASS_Public/active.ttl'); getSolidDataset.mockResolvedValue(setThing(dataset, newActiveTTL)); useSession.mockReturnValue({ diff --git a/test/model-helpers/User.test.js b/test/model-helpers/User.test.js index dd46be950..2b796c00a 100644 --- a/test/model-helpers/User.test.js +++ b/test/model-helpers/User.test.js @@ -54,7 +54,7 @@ describe('updateUserActivity', () => { it('returns existing activity dataset if it exists', async () => { await updateUserActivity(session, mockPodUrl); expect(saveSolidDatasetAt).toBeCalledWith( - `${mockPodUrl}public/active.ttl`, + `${mockPodUrl}PASS_Public/active.ttl`, expect.objectContaining({ type: 'Dataset' }), expect.objectContaining({ fetch: session.fetch }) ); @@ -65,7 +65,7 @@ describe('updateUserActivity', () => { getSolidDataset.mockRejectedValueOnce(Error('dataset does not exist')); await updateUserActivity(session, mockPodUrl); expect(saveSolidDatasetAt).toBeCalledWith( - `${mockPodUrl}public/active.ttl`, + `${mockPodUrl}PASS_Public/active.ttl`, expect.objectContaining({ type: 'Dataset' }), expect.objectContaining({ fetch: session.fetch }) ); @@ -113,7 +113,7 @@ describe('parseUserFromThing', () => { it("fetches user activity from the user's pod", async () => { await parseUserFromThing(mockThing, session); expect(getSolidDataset).toBeCalledWith( - `${podUrl}public/active.ttl`, + `${podUrl}PASS_Public/active.ttl`, expect.objectContaining({ fetch: session.fetch }) diff --git a/test/utils/session-core.test.js b/test/utils/session-core.test.js index 57d27dbe1..5e3520a4d 100644 --- a/test/utils/session-core.test.js +++ b/test/utils/session-core.test.js @@ -218,7 +218,7 @@ describe('createPublicContainer', () => { vi.clearAllMocks(); }); - const publicContainerUrl = `${mockPodUrl}public/`; + const publicContainerUrl = `${mockPodUrl}PASS_Public/`; it('just runs getSolidDataset if container exist', async () => { await createPublicContainer(session, publicContainerUrl); diff --git a/test/utils/session-helper.test.js b/test/utils/session-helper.test.js index 69b114d57..306a57690 100644 --- a/test/utils/session-helper.test.js +++ b/test/utils/session-helper.test.js @@ -115,6 +115,6 @@ describe('getContainerUrl', () => { it('Returns the correct container URL to public', () => { const containerUrl = getContainerUrl(session, 'Public', INTERACTION_TYPES.SELF); - expect(containerUrl).toBe(`${mockPodUrl}public/`); + expect(containerUrl).toBe(`${mockPodUrl}PASS_Public/`); }); }); From 4814a22b476369e7b1df5b34ecee29e90683b61e Mon Sep 17 00:00:00 2001 From: Ka Hung Lee Date: Fri, 9 Jun 2023 19:32:57 -0700 Subject: [PATCH 03/23] Corrected test with oidc snapshot --- src/utils/network/session-helper.js | 2 +- .../NavBar/__snapshots__/OidcLoginComponent.test.jsx.snap | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/network/session-helper.js b/src/utils/network/session-helper.js index 1b6051d44..9ac36a9c0 100644 --- a/src/utils/network/session-helper.js +++ b/src/utils/network/session-helper.js @@ -165,7 +165,7 @@ export const getContainerUrl = (session, containerType, fetchType, otherPodUsern : `https://${otherPodUsername}.${oidcIssuer.split('/')[2]}/`; if (containerType.split(' ').length > 1) { - return `${POD_URL}PASS_${containerType.replace(' ', '_')}/`; + return `${POD_URL}PASS_${containerType.replace("'", '').replace(' ', '_')}/`; } return `${POD_URL}PASS_${containerType}/`; diff --git a/test/components/NavBar/__snapshots__/OidcLoginComponent.test.jsx.snap b/test/components/NavBar/__snapshots__/OidcLoginComponent.test.jsx.snap index 1fee593bb..67a914255 100644 --- a/test/components/NavBar/__snapshots__/OidcLoginComponent.test.jsx.snap +++ b/test/components/NavBar/__snapshots__/OidcLoginComponent.test.jsx.snap @@ -25,7 +25,7 @@ exports[`renders correctly 1`] = ` class="MuiInputBase-input MuiFilledInput-input css-10botns-MuiInputBase-input-MuiFilledInput-input" id=":r0:" type="text" - value="https://solidcommunity.net/" + value="http://localhost:3000/" />
@@ -33,7 +33,7 @@ exports[`renders correctly 1`] = ` class="MuiBox-root css-120gsus" />
- https://solidcommunity.net/ + http://localhost:3000/