Allow merge activity logging for locations assets and characters
This commit is contained in:
parent
a666696a9f
commit
84ed078eba
@ -21,6 +21,14 @@ BEGIN TRY
|
|||||||
INSERT dbo.LocationRelationships(FromLocationID, ToLocationID, LocationRelationshipTypeID)
|
INSERT dbo.LocationRelationships(FromLocationID, ToLocationID, LocationRelationshipTypeID)
|
||||||
VALUES (@Source,@Target,@RelType),(@Source,@Child,@RelType),(@Target,@Child,@RelType);
|
VALUES (@Source,@Target,@RelType),(@Source,@Child,@RelType),(@Target,@Child,@RelType);
|
||||||
EXEC dbo.Location_Merge @Source, @Target, @UserID;
|
EXEC dbo.Location_Merge @Source, @Target, @UserID;
|
||||||
|
-- Exercise the post-merge activity write used by the service, not just the merge procedure.
|
||||||
|
EXEC dbo.ProjectAudit_Record @ProjectID=@ProjectID, @UserID=@UserID,
|
||||||
|
@ActivityType=N'Merged', @EntityType=N'Location', @EntityID=@Target,
|
||||||
|
@EntityName=N'Merge regression target', @Description=N'Merge regression activity';
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM dbo.ProjectActivity WHERE ProjectID=@ProjectID
|
||||||
|
AND EntityType=N'Location' AND EntityID=@Target AND ActivityType=N'Merged')
|
||||||
|
THROW 51001, 'Location merge activity was not recorded.', 1;
|
||||||
|
|
||||||
IF NOT EXISTS (SELECT 1 FROM dbo.Locations WHERE LocationID=@Source AND IsArchived=1) THROW 51001, 'Source location was not archived.', 1;
|
IF NOT EXISTS (SELECT 1 FROM dbo.Locations WHERE LocationID=@Source AND IsArchived=1) THROW 51001, 'Source location was not archived.', 1;
|
||||||
IF NOT EXISTS (SELECT 1 FROM dbo.Locations WHERE LocationID=@Child AND ParentLocationID=@Target) THROW 51001, 'Child location was not moved.', 1;
|
IF NOT EXISTS (SELECT 1 FROM dbo.Locations WHERE LocationID=@Child AND ParentLocationID=@Target) THROW 51001, 'Child location was not moved.', 1;
|
||||||
IF NOT EXISTS (SELECT 1 FROM dbo.Scenes WHERE SceneID=@SceneID AND PrimaryLocationID=@Target) THROW 51001, 'Primary scene location was not moved.', 1;
|
IF NOT EXISTS (SELECT 1 FROM dbo.Scenes WHERE SceneID=@SceneID AND PrimaryLocationID=@Target) THROW 51001, 'Primary scene location was not moved.', 1;
|
||||||
@ -45,6 +53,14 @@ BEGIN TRY
|
|||||||
DECLARE @CustodyID int=SCOPE_IDENTITY(), @DepType int=(SELECT TOP (1) AssetDependencyTypeID FROM dbo.AssetDependencyTypes);
|
DECLARE @CustodyID int=SCOPE_IDENTITY(), @DepType int=(SELECT TOP (1) AssetDependencyTypeID FROM dbo.AssetDependencyTypes);
|
||||||
INSERT dbo.AssetDependencies(SourceAssetID,TargetAssetID,AssetDependencyTypeID) VALUES (@Source,@Target,@DepType),(@Source,@Other,@DepType),(@Target,@Other,@DepType);
|
INSERT dbo.AssetDependencies(SourceAssetID,TargetAssetID,AssetDependencyTypeID) VALUES (@Source,@Target,@DepType),(@Source,@Other,@DepType),(@Target,@Other,@DepType);
|
||||||
EXEC dbo.StoryAsset_Merge @Source,@Target,@UserID;
|
EXEC dbo.StoryAsset_Merge @Source,@Target,@UserID;
|
||||||
|
-- Exercise the post-merge activity write used by the service, not just the merge procedure.
|
||||||
|
EXEC dbo.ProjectAudit_Record @ProjectID=@ProjectID, @UserID=@UserID,
|
||||||
|
@ActivityType=N'Merged', @EntityType=N'Asset', @EntityID=@Target,
|
||||||
|
@EntityName=N'Merge regression target', @Description=N'Merge regression activity';
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM dbo.ProjectActivity WHERE ProjectID=@ProjectID
|
||||||
|
AND EntityType=N'Asset' AND EntityID=@Target AND ActivityType=N'Merged')
|
||||||
|
THROW 51001, 'Asset merge activity was not recorded.', 1;
|
||||||
|
|
||||||
IF NOT EXISTS (SELECT 1 FROM dbo.StoryAssets WHERE StoryAssetID=@Source AND IsArchived=1) THROW 51001, 'Source asset was not archived.', 1;
|
IF NOT EXISTS (SELECT 1 FROM dbo.StoryAssets WHERE StoryAssetID=@Source AND IsArchived=1) THROW 51001, 'Source asset was not archived.', 1;
|
||||||
IF (SELECT COUNT(*) FROM dbo.AssetAliases WHERE StoryAssetID=@Target) <> 3 THROW 51001, 'Asset names were lost or duplicated.', 1;
|
IF (SELECT COUNT(*) FROM dbo.AssetAliases WHERE StoryAssetID=@Target) <> 3 THROW 51001, 'Asset names were lost or duplicated.', 1;
|
||||||
IF (SELECT COUNT(*) FROM dbo.WordCompanionSceneAssets WHERE SceneID=@SceneID AND StoryAssetID=@Target) <> 1 THROW 51001, 'Duplicate asset scene link.', 1;
|
IF (SELECT COUNT(*) FROM dbo.WordCompanionSceneAssets WHERE SceneID=@SceneID AND StoryAssetID=@Target) <> 1 THROW 51001, 'Duplicate asset scene link.', 1;
|
||||||
|
|||||||
38
PlotLine.Tests/Sql/ProjectActivityMerge.sql
Normal file
38
PlotLine.Tests/Sql/ProjectActivityMerge.sql
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
-- 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
|
||||||
24
PlotLine/Sql/194_ProjectActivityMergeType.sql
Normal file
24
PlotLine/Sql/194_ProjectActivityMergeType.sql
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
-- Character, location and asset merge services record a Merged activity after
|
||||||
|
-- moving references. Permit that activity without weakening the existing rules.
|
||||||
|
SET XACT_ABORT ON;
|
||||||
|
SET ANSI_NULLS ON;
|
||||||
|
SET QUOTED_IDENTIFIER ON;
|
||||||
|
GO
|
||||||
|
BEGIN TRY
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
IF EXISTS (SELECT 1 FROM sys.check_constraints
|
||||||
|
WHERE name = N'CK_ProjectActivity_ActivityType'
|
||||||
|
AND parent_object_id = OBJECT_ID(N'dbo.ProjectActivity'))
|
||||||
|
ALTER TABLE dbo.ProjectActivity DROP CONSTRAINT CK_ProjectActivity_ActivityType;
|
||||||
|
|
||||||
|
ALTER TABLE dbo.ProjectActivity WITH CHECK
|
||||||
|
ADD CONSTRAINT CK_ProjectActivity_ActivityType CHECK
|
||||||
|
(ActivityType IN (N'Created', N'Updated', N'Deleted', N'Archived', N'Restored',
|
||||||
|
N'Shared', N'CollaboratorRemoved', N'Exported', N'Merged'));
|
||||||
|
COMMIT TRANSACTION;
|
||||||
|
END TRY
|
||||||
|
BEGIN CATCH
|
||||||
|
IF XACT_STATE() <> 0 ROLLBACK TRANSACTION;
|
||||||
|
THROW;
|
||||||
|
END CATCH;
|
||||||
|
GO
|
||||||
Loading…
x
Reference in New Issue
Block a user