PlotDirector/PlotLine.Tests/Sql/ProjectActivityMerge.sql

39 lines
2.0 KiB
Transact-SQL

-- 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