public void TcpContracts_UpdatePermissions_HasCorrectBytes()

in foreign/csharp/Iggy_SDK_Tests/ContractTests/TcpContract.cs [260:338]


    public void TcpContracts_UpdatePermissions_HasCorrectBytes()
    {
        // Arrange
        var request = new UpdateUserPermissionsRequest
        {
            UserId = Identifier.Numeric(1),
            Permissions = PermissionsFactory.CreatePermissions()
        };

        // Act
        var result = TcpContracts.UpdatePermissions(request);

        // Assert
        int position = 2;

        var userIdBytes = result[position..(position + request.UserId.Length)];
        position += request.UserId.Length;
        Assert.Equal(request.UserId.Value, userIdBytes);

        var permissionsFlag = result[position];
        position += 1;
        if (permissionsFlag == 1)
        {
            var permissionsSize = BinaryPrimitives.ReadInt32LittleEndian(result[position..(position + 4)]);
            position += 4;

            var permissionsBytes = result[position..(position + permissionsSize)];

            var mappedPermissions = PermissionsFactory.PermissionsFromBytes(permissionsBytes);

            request.Permissions.Global.Should().BeEquivalentTo(mappedPermissions.Global);

            if (request.Permissions.Streams != null)
            {
                Assert.NotNull(mappedPermissions.Streams);

                foreach (var (streamId, stream) in request.Permissions.Streams)
                {
                    Assert.True(mappedPermissions.Streams.ContainsKey(streamId));
                    var mappedStream = mappedPermissions.Streams[streamId];

                    Assert.Equal(stream.ManageStream, mappedStream.ManageStream);
                    Assert.Equal(stream.ReadStream, mappedStream.ReadStream);
                    Assert.Equal(stream.ManageTopics, mappedStream.ManageTopics);
                    Assert.Equal(stream.ReadTopics, mappedStream.ReadTopics);
                    Assert.Equal(stream.PollMessages, mappedStream.PollMessages);
                    Assert.Equal(stream.SendMessages, mappedStream.SendMessages);

                    if (stream.Topics != null)
                    {
                        Assert.NotNull(mappedStream.Topics);

                        foreach (var (topicId, topic) in stream.Topics)
                        {
                            Assert.True(mappedStream.Topics.ContainsKey(topicId));
                            var mappedTopic = mappedStream.Topics[topicId];

                            Assert.Equal(topic.ManageTopic, mappedTopic.ManageTopic);
                            Assert.Equal(topic.ReadTopic, mappedTopic.ReadTopic);
                            Assert.Equal(topic.PollMessages, mappedTopic.PollMessages);
                            Assert.Equal(topic.SendMessages, mappedTopic.SendMessages);
                        }
                    }
                    else
                    {
                        Assert.Null(mappedStream.Topics);
                    }
                }
            }
            else
            {
                Assert.Null(mappedPermissions.Streams);
            }
        }
        else
        {
            Assert.Null(request.Permissions);
        }
    }