From c9fd3eb4fb2f44e63726d4b2b89377cf41842ff8 Mon Sep 17 00:00:00 2001 From: volkanceylan Date: Mon, 27 Jan 2025 16:35:04 +0300 Subject: [PATCH] Add SaveRequestHandler permission test --- ...eRequestHandler_Create_Permission_Tests.cs | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 tests/Serenity.Net.Tests/services/requesthandlers/save/SaveRequestHandler_Create_Permission_Tests.cs diff --git a/tests/Serenity.Net.Tests/services/requesthandlers/save/SaveRequestHandler_Create_Permission_Tests.cs b/tests/Serenity.Net.Tests/services/requesthandlers/save/SaveRequestHandler_Create_Permission_Tests.cs new file mode 100644 index 0000000000..e88e5ffe79 --- /dev/null +++ b/tests/Serenity.Net.Tests/services/requesthandlers/save/SaveRequestHandler_Create_Permission_Tests.cs @@ -0,0 +1,61 @@ +namespace Serenity.Services; + +public partial class SaveRequestHandler_Permission_Tests +{ + const string insertPermission = "Test:Insert"; + const string updatePermission = "Test:Update"; + + [Fact] + public void Create_Throws_If_User_DoesntHave_TheInsertPermission() + { + var context = new NullRequestContext().WithPermissions(x => x is not insertPermission); + var handler = new SaveRequestHandler(context); + Assert.Throws(() => handler.Create(new MockUnitOfWork(), new() + { + Entity = new() { Name = "Test" } + })); + } + + [Fact] + public void Create_Allows_If_User_Has_TheInsertPermission() + { + var context = new NullRequestContext().WithPermissions(x => x is insertPermission); + var handler = new SaveRequestHandler(context); + using var connection = new MockDbConnection(); + connection.InterceptManipulateRow(args => + { + var insertRow = Assert.IsType(args.Row); + Assert.False(args.Id.HasValue); + Assert.True(args.GetNewId); + Assert.True(insertRow.IsAssigned(TestRow.Fields.Name)); + Assert.Equal("Test", insertRow.Name); + Assert.False(insertRow.IsAssigned(TestRow.Fields.Id)); + return 123; + }); + var row = new TestRow() { Name = "Test" }; + handler.Create(new MockUnitOfWork(connection), new() + { + Entity = row + }); + Assert.False(row.IsAssigned(TestRow.Fields.Id)); + + Assert.Equal(1, connection.AllCallCount); + Assert.Single(connection.ManipulateRowCalls); + } + + [InsertPermission(insertPermission)] + [UpdatePermission(updatePermission)] + private class TestRow : Row, IIdRow + { + [IdProperty, Identity] + public int? Id { get => fields.Id[this]; set => fields.Id[this] = value; } + + [NameProperty] + public string Name { get => fields.Name[this]; set => fields.Name[this] = value; } + public class RowFields : RowFieldsBase + { + public Int32Field Id; + public StringField Name; + } + } +}