From 892be114455f024e0cc63d90c92298b48db1f8a2 Mon Sep 17 00:00:00 2001 From: Balu Babu Date: Fri, 3 Nov 2023 13:51:18 +0530 Subject: [PATCH] chore: added all test-cases for updateSharedRequest method --- .../20230406064219_init/migration.sql | 270 ------------------ .../migration.sql | 5 - .../prisma/migrations/migration_lock.toml | 3 - .../shared-request.service.spec.ts | 77 +++++ 4 files changed, 77 insertions(+), 278 deletions(-) delete mode 100644 packages/hoppscotch-backend/prisma/migrations/20230406064219_init/migration.sql delete mode 100644 packages/hoppscotch-backend/prisma/migrations/20231025133719_shared_requests/migration.sql delete mode 100644 packages/hoppscotch-backend/prisma/migrations/migration_lock.toml diff --git a/packages/hoppscotch-backend/prisma/migrations/20230406064219_init/migration.sql b/packages/hoppscotch-backend/prisma/migrations/20230406064219_init/migration.sql deleted file mode 100644 index 149af39ed..000000000 --- a/packages/hoppscotch-backend/prisma/migrations/20230406064219_init/migration.sql +++ /dev/null @@ -1,270 +0,0 @@ --- CreateEnum -CREATE TYPE "ReqType" AS ENUM ('REST', 'GQL'); - --- CreateEnum -CREATE TYPE "TeamMemberRole" AS ENUM ('OWNER', 'VIEWER', 'EDITOR'); - --- CreateTable -CREATE TABLE "Team" ( - "id" TEXT NOT NULL, - "name" TEXT NOT NULL, - - CONSTRAINT "Team_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TeamMember" ( - "id" TEXT NOT NULL, - "role" "TeamMemberRole" NOT NULL, - "userUid" TEXT NOT NULL, - "teamID" TEXT NOT NULL, - - CONSTRAINT "TeamMember_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TeamInvitation" ( - "id" TEXT NOT NULL, - "teamID" TEXT NOT NULL, - "creatorUid" TEXT NOT NULL, - "inviteeEmail" TEXT NOT NULL, - "inviteeRole" "TeamMemberRole" NOT NULL, - - CONSTRAINT "TeamInvitation_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TeamCollection" ( - "id" TEXT NOT NULL, - "parentID" TEXT, - "teamID" TEXT NOT NULL, - "title" TEXT NOT NULL, - "orderIndex" INTEGER NOT NULL, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedOn" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "TeamCollection_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TeamRequest" ( - "id" TEXT NOT NULL, - "collectionID" TEXT NOT NULL, - "teamID" TEXT NOT NULL, - "title" TEXT NOT NULL, - "request" JSONB NOT NULL, - "orderIndex" INTEGER NOT NULL, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedOn" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "TeamRequest_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "Shortcode" ( - "id" TEXT NOT NULL, - "request" JSONB NOT NULL, - "creatorUid" TEXT, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "Shortcode_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "TeamEnvironment" ( - "id" TEXT NOT NULL, - "teamID" TEXT NOT NULL, - "name" TEXT NOT NULL, - "variables" JSONB NOT NULL, - - CONSTRAINT "TeamEnvironment_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "User" ( - "uid" TEXT NOT NULL, - "displayName" TEXT, - "email" TEXT, - "photoURL" TEXT, - "isAdmin" BOOLEAN NOT NULL DEFAULT false, - "refreshToken" TEXT, - "currentRESTSession" JSONB, - "currentGQLSession" JSONB, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "User_pkey" PRIMARY KEY ("uid") -); - --- CreateTable -CREATE TABLE "Account" ( - "id" TEXT NOT NULL, - "userId" TEXT NOT NULL, - "provider" TEXT NOT NULL, - "providerAccountId" TEXT NOT NULL, - "providerRefreshToken" TEXT, - "providerAccessToken" TEXT, - "providerScope" TEXT, - "loggedIn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "Account_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "VerificationToken" ( - "deviceIdentifier" TEXT NOT NULL, - "token" TEXT NOT NULL, - "userUid" TEXT NOT NULL, - "expiresOn" TIMESTAMP(3) NOT NULL -); - --- CreateTable -CREATE TABLE "UserSettings" ( - "id" TEXT NOT NULL, - "userUid" TEXT NOT NULL, - "properties" JSONB NOT NULL, - "updatedOn" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "UserSettings_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "UserHistory" ( - "id" TEXT NOT NULL, - "userUid" TEXT NOT NULL, - "reqType" "ReqType" NOT NULL, - "request" JSONB NOT NULL, - "responseMetadata" JSONB NOT NULL, - "isStarred" BOOLEAN NOT NULL, - "executedOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - - CONSTRAINT "UserHistory_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "UserEnvironment" ( - "id" TEXT NOT NULL, - "userUid" TEXT NOT NULL, - "name" TEXT, - "variables" JSONB NOT NULL, - "isGlobal" BOOLEAN NOT NULL, - - CONSTRAINT "UserEnvironment_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "InvitedUsers" ( - "adminUid" TEXT NOT NULL, - "adminEmail" TEXT NOT NULL, - "inviteeEmail" TEXT NOT NULL, - "invitedOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP -); - --- CreateTable -CREATE TABLE "UserRequest" ( - "id" TEXT NOT NULL, - "collectionID" TEXT NOT NULL, - "userUid" TEXT NOT NULL, - "title" TEXT NOT NULL, - "request" JSONB NOT NULL, - "type" "ReqType" NOT NULL, - "orderIndex" INTEGER NOT NULL, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedOn" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "UserRequest_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "UserCollection" ( - "id" TEXT NOT NULL, - "parentID" TEXT, - "userUid" TEXT NOT NULL, - "title" TEXT NOT NULL, - "orderIndex" INTEGER NOT NULL, - "type" "ReqType" NOT NULL, - "createdOn" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, - "updatedOn" TIMESTAMP(3) NOT NULL, - - CONSTRAINT "UserCollection_pkey" PRIMARY KEY ("id") -); - --- CreateIndex -CREATE UNIQUE INDEX "TeamMember_teamID_userUid_key" ON "TeamMember"("teamID", "userUid"); - --- CreateIndex -CREATE INDEX "TeamInvitation_teamID_idx" ON "TeamInvitation"("teamID"); - --- CreateIndex -CREATE UNIQUE INDEX "TeamInvitation_teamID_inviteeEmail_key" ON "TeamInvitation"("teamID", "inviteeEmail"); - --- CreateIndex -CREATE UNIQUE INDEX "Shortcode_id_creatorUid_key" ON "Shortcode"("id", "creatorUid"); - --- CreateIndex -CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); - --- CreateIndex -CREATE UNIQUE INDEX "Account_provider_providerAccountId_key" ON "Account"("provider", "providerAccountId"); - --- CreateIndex -CREATE UNIQUE INDEX "VerificationToken_token_key" ON "VerificationToken"("token"); - --- CreateIndex -CREATE UNIQUE INDEX "VerificationToken_deviceIdentifier_token_key" ON "VerificationToken"("deviceIdentifier", "token"); - --- CreateIndex -CREATE UNIQUE INDEX "UserSettings_userUid_key" ON "UserSettings"("userUid"); - --- CreateIndex -CREATE UNIQUE INDEX "InvitedUsers_inviteeEmail_key" ON "InvitedUsers"("inviteeEmail"); - --- AddForeignKey -ALTER TABLE "TeamMember" ADD CONSTRAINT "TeamMember_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamInvitation" ADD CONSTRAINT "TeamInvitation_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamCollection" ADD CONSTRAINT "TeamCollection_parentID_fkey" FOREIGN KEY ("parentID") REFERENCES "TeamCollection"("id") ON DELETE SET NULL ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamCollection" ADD CONSTRAINT "TeamCollection_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamRequest" ADD CONSTRAINT "TeamRequest_collectionID_fkey" FOREIGN KEY ("collectionID") REFERENCES "TeamCollection"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamRequest" ADD CONSTRAINT "TeamRequest_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "TeamEnvironment" ADD CONSTRAINT "TeamEnvironment_teamID_fkey" FOREIGN KEY ("teamID") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "VerificationToken" ADD CONSTRAINT "VerificationToken_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserSettings" ADD CONSTRAINT "UserSettings_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserHistory" ADD CONSTRAINT "UserHistory_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserEnvironment" ADD CONSTRAINT "UserEnvironment_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "InvitedUsers" ADD CONSTRAINT "InvitedUsers_adminUid_fkey" FOREIGN KEY ("adminUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserRequest" ADD CONSTRAINT "UserRequest_collectionID_fkey" FOREIGN KEY ("collectionID") REFERENCES "UserCollection"("id") ON DELETE RESTRICT ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserRequest" ADD CONSTRAINT "UserRequest_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserCollection" ADD CONSTRAINT "UserCollection_parentID_fkey" FOREIGN KEY ("parentID") REFERENCES "UserCollection"("id") ON DELETE CASCADE ON UPDATE CASCADE; - --- AddForeignKey -ALTER TABLE "UserCollection" ADD CONSTRAINT "UserCollection_userUid_fkey" FOREIGN KEY ("userUid") REFERENCES "User"("uid") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/packages/hoppscotch-backend/prisma/migrations/20231025133719_shared_requests/migration.sql b/packages/hoppscotch-backend/prisma/migrations/20231025133719_shared_requests/migration.sql deleted file mode 100644 index e2300acfe..000000000 --- a/packages/hoppscotch-backend/prisma/migrations/20231025133719_shared_requests/migration.sql +++ /dev/null @@ -1,5 +0,0 @@ --- AlterTable -ALTER TABLE "Shortcode" ADD COLUMN "properties" JSONB; - --- AddForeignKey -ALTER TABLE "Shortcode" ADD CONSTRAINT "Shortcode_creatorUid_fkey" FOREIGN KEY ("creatorUid") REFERENCES "User"("uid") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/packages/hoppscotch-backend/prisma/migrations/migration_lock.toml b/packages/hoppscotch-backend/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92c2..000000000 --- a/packages/hoppscotch-backend/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/packages/hoppscotch-backend/src/shared-request/shared-request.service.spec.ts b/packages/hoppscotch-backend/src/shared-request/shared-request.service.spec.ts index 5e85687f8..3908d7efd 100644 --- a/packages/hoppscotch-backend/src/shared-request/shared-request.service.spec.ts +++ b/packages/hoppscotch-backend/src/shared-request/shared-request.service.spec.ts @@ -4,6 +4,7 @@ import { SHARED_REQUEST_INVALID_PROPERTIES_JSON, SHARED_REQUEST_INVALID_REQUEST_JSON, SHARED_REQUEST_NOT_FOUND, + SHARED_REQUEST_PROPERTIES_NOT_FOUND, } from 'src/errors'; import { UserService } from 'src/user/user.service'; import { SharedRequestService } from './shared-request.service'; @@ -52,6 +53,7 @@ const mockEmbed = { properties: '{}', createdOn: createdOn, creatorUid: user.uid, + updatedOn: createdOn, }; const mockShortcode = { @@ -60,6 +62,7 @@ const mockShortcode = { properties: null, createdOn: createdOn, creatorUid: user.uid, + updatedOn: createdOn, }; const sharedRequests = [ @@ -73,6 +76,7 @@ const sharedRequests = [ }, creatorUid: user.uid, createdOn: new Date(), + updatedOn: createdOn, }, { id: 'blablabla1', @@ -84,6 +88,7 @@ const sharedRequests = [ }, creatorUid: user.uid, createdOn: new Date(), + updatedOn: createdOn, }, ]; @@ -393,4 +398,76 @@ describe('SharedRequestService', () => { expect(result).toEqual(0); }); }); + + describe('updateSharedRequest', () => { + test('should return SHARED_REQUEST_PROPERTIES_NOT_FOUND error when updatedProps in invalid', async () => { + const result = await sharedRequestsService.updateSharedRequest( + mockEmbed.id, + user.uid, + '', + ); + expect(result).toEqualLeft(SHARED_REQUEST_PROPERTIES_NOT_FOUND); + }); + + test('should return SHARED_REQUEST_PROPERTIES_NOT_FOUND error when updatedProps in invalid JSON format', async () => { + const result = await sharedRequestsService.updateSharedRequest( + mockEmbed.id, + user.uid, + '{kk', + ); + expect(result).toEqualLeft(SHARED_REQUEST_INVALID_PROPERTIES_JSON); + }); + + test('should return SHARED_REQUEST_NOT_FOUND error when SharedRequest ID is invalid', async () => { + mockPrisma.shortcode.update.mockRejectedValue('RecordNotFound'); + const result = await sharedRequestsService.updateSharedRequest( + 'invalidID', + user.uid, + '{}', + ); + expect(result).toEqualLeft(SHARED_REQUEST_NOT_FOUND); + }); + + test('should successfully update a SharedRequests with valid inputs', async () => { + mockPrisma.shortcode.update.mockResolvedValueOnce({ + ...mockEmbed, + properties: '{"foo":"bar"}', + }); + + const result = await sharedRequestsService.updateSharedRequest( + mockEmbed.id, + user.uid, + '{"foo":"bar"}', + ); + expect(result).toEqualRight({ + id: mockEmbed.id, + createdOn: mockEmbed.createdOn, + request: JSON.stringify(mockEmbed.request), + properties: JSON.stringify('{"foo":"bar"}'), + }); + }); + + test('should send pubsub message to `shared_request/{uid}/updated` on successful Update of SharedRequest', async () => { + mockPrisma.shortcode.update.mockResolvedValueOnce({ + ...mockEmbed, + properties: '{"foo":"bar"}', + }); + + const result = await sharedRequestsService.updateSharedRequest( + mockEmbed.id, + user.uid, + '{"foo":"bar"}', + ); + + expect(mockPubSub.publish).toHaveBeenCalledWith( + `shared_request/${mockEmbed.creatorUid}/updated`, + { + id: mockEmbed.id, + createdOn: mockEmbed.createdOn, + request: JSON.stringify(mockEmbed.request), + properties: JSON.stringify('{"foo":"bar"}'), + }, + ); + }); + }); });