-- Exercise the same audit procedure used by the merge services; leave no data behind. SET XACT_ABORT ON; BEGIN TRY BEGIN TRANSACTION; DECLARE @ProjectID int, @UserID int; SELECT TOP (1) @ProjectID=ProjectID, @UserID=UserID FROM dbo.ProjectUserAccess WHERE IsActive=1; IF @ProjectID IS NULL THROW 51001, 'Audit tests require a project with an active user.', 1; EXEC dbo.ProjectAudit_Record @ProjectID=@ProjectID, @UserID=@UserID, @ActivityType=N'Merged', @EntityType=N'Character', @EntityName=N'Merge audit regression'; IF NOT EXISTS (SELECT 1 FROM dbo.ProjectActivity WHERE ProjectID=@ProjectID AND ActivityType=N'Merged' AND EntityType=N'Character' AND EntityName=N'Merge audit regression') THROW 51001, 'Character merge activity was not recorded.', 1; -- Preserve all activity types that were allowed before the merge migration. INSERT dbo.ProjectActivity(ProjectID,UserID,ActivityType,EntityType,EntityName) SELECT @ProjectID,@UserID,ActivityType,N'Project',N'Merge audit regression' FROM (VALUES (N'Created'),(N'Updated'),(N'Deleted'),(N'Archived'),(N'Restored'), (N'Shared'),(N'CollaboratorRemoved'),(N'Exported')) types(ActivityType); ROLLBACK TRANSACTION; SELECT N'PASS: character merge and all existing activity types; fixtures rolled back' AS Result; END TRY BEGIN CATCH IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; THROW; END CATCH; GO BEGIN TRY BEGIN TRANSACTION; DECLARE @ProjectID int=(SELECT TOP (1) ProjectID FROM dbo.Projects); EXEC dbo.ProjectAudit_Record @ProjectID=@ProjectID, @ActivityType=N'NotAnActivityType', @EntityType=N'Project', @EntityName=N'Merge audit regression'; THROW 51001, 'Unknown activity type was accepted.', 1; END TRY BEGIN CATCH IF XACT_STATE() <> 0 ROLLBACK TRANSACTION; IF ERROR_NUMBER() <> 547 OR ERROR_MESSAGE() NOT LIKE N'%CK_ProjectActivity_ActivityType%' THROW; SELECT N'PASS: unknown activity types remain rejected; fixtures rolled back' AS Result; END CATCH; GO