aboutsummaryrefslogtreecommitdiff
path: root/tests/Jellyfin.Model.Tests/Entities/JsonLowerCaseConverterTests.cs
blob: 955d296cc88f99d0816f7610347b90a32443c8b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System.Text.Json;
using System.Text.Json.Serialization;
using MediaBrowser.Model.Entities;
using Xunit;

namespace Jellyfin.Model.Tests.Entities
{
    public class JsonLowerCaseConverterTests
    {
        private readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions()
        {
            Converters =
            {
                new JsonStringEnumConverter()
            }
        };

        [Theory]
        [InlineData(null, "{\"CollectionType\":null}")]
        [InlineData(CollectionTypeOptions.Movies, "{\"CollectionType\":\"movies\"}")]
        [InlineData(CollectionTypeOptions.MusicVideos, "{\"CollectionType\":\"musicvideos\"}")]
        public void Serialize_CollectionTypeOptions_Correct(CollectionTypeOptions? collectionType, string expected)
        {
            Assert.Equal(expected, JsonSerializer.Serialize(new TestContainer(collectionType), _jsonOptions));
        }

        [Theory]
        [InlineData("{\"CollectionType\":null}", null)]
        [InlineData("{\"CollectionType\":\"movies\"}", CollectionTypeOptions.Movies)]
        [InlineData("{\"CollectionType\":\"musicvideos\"}", CollectionTypeOptions.MusicVideos)]
        public void Deserialize_CollectionTypeOptions_Correct(string json, CollectionTypeOptions? result)
        {
            var res = JsonSerializer.Deserialize<TestContainer>(json, _jsonOptions);
            Assert.NotNull(res);
            Assert.Equal(result, res!.CollectionType);
        }

        [Theory]
        [InlineData(null)]
        [InlineData(CollectionTypeOptions.Movies)]
        [InlineData(CollectionTypeOptions.MusicVideos)]
        public void RoundTrip_CollectionTypeOptions_Correct(CollectionTypeOptions? value)
        {
            var res = JsonSerializer.Deserialize<TestContainer>(JsonSerializer.Serialize(new TestContainer(value), _jsonOptions), _jsonOptions);
            Assert.NotNull(res);
            Assert.Equal(value, res!.CollectionType);
        }

        [Theory]
        [InlineData("{\"CollectionType\":null}")]
        [InlineData("{\"CollectionType\":\"movies\"}")]
        [InlineData("{\"CollectionType\":\"musicvideos\"}")]
        public void RoundTrip_String_Correct(string json)
        {
            var res = JsonSerializer.Serialize(JsonSerializer.Deserialize<TestContainer>(json, _jsonOptions), _jsonOptions);
            Assert.Equal(json, res);
        }

        private class TestContainer
        {
            public TestContainer(CollectionTypeOptions? collectionType)
            {
                CollectionType = collectionType;
            }

            [JsonConverter(typeof(JsonLowerCaseConverter<CollectionTypeOptions?>))]
            public CollectionTypeOptions? CollectionType { get; set; }
        }
    }
}