From e9b50ce71bc3b39e0911be7102f80cc61a8b741b Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 27 Nov 2016 22:21:43 +0100 Subject: [PATCH] More tests --- .../UpdateProperties.cs | 209 ------------------ .../app/schemas/schemas-page.component.html | 2 +- .../app/settings/clients-page.component.html | 2 +- .../settings/languages-page.component.html | 2 +- .../CQRS/DomainObjectTest.cs | 137 ++++++++++++ .../EventStore/DefaultNameResolverTests.cs | 2 +- .../Security/ExtensionsTests.cs | 69 ++++++ .../UserTokenTests.cs | 4 +- 8 files changed, 212 insertions(+), 215 deletions(-) delete mode 100644 src/Squidex.Infrastructure/UpdateProperties.cs create mode 100644 tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs create mode 100644 tests/Squidex.Infrastructure.Tests/Security/ExtensionsTests.cs diff --git a/src/Squidex.Infrastructure/UpdateProperties.cs b/src/Squidex.Infrastructure/UpdateProperties.cs deleted file mode 100644 index 0116af360..000000000 --- a/src/Squidex.Infrastructure/UpdateProperties.cs +++ /dev/null @@ -1,209 +0,0 @@ -// ========================================================================== -// Guard.cs -// Squidex Headless CMS -// ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. -// ========================================================================== - -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Runtime.CompilerServices; - -// ReSharper disable InvertIf - -namespace Squidex.Infrastructure -{ - public static class UpdateProperties - { - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void ValidNumber(float target, string parameterName) - { - if (float.IsNaN(target) || float.IsPositiveInfinity(target) || float.IsNegativeInfinity(target)) - { - throw new ArgumentException("Value must be a valid number.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void ValidNumber(double target, string parameterName) - { - if (double.IsNaN(target) || double.IsPositiveInfinity(target) || double.IsNegativeInfinity(target)) - { - throw new ArgumentException("Value must be a valid number.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void ValidSlug(string target, string parameterName) - { - NotNullOrEmpty(target, parameterName); - - if (!target.IsSlug()) - { - throw new ArgumentException("Target is not a valid slug.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void HasType(object target, string parameterName) - { - if (target != null && target.GetType() != typeof(T)) - { - throw new ArgumentException($"The parameter must be of type {typeof(T)}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void HasType(object target, Type expectedType, string parameterName) - { - if (target != null && expectedType != null && target.GetType() != expectedType) - { - throw new ArgumentException($"The parameter must be of type {expectedType}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Between(TValue target, TValue lower, TValue upper, string parameterName) where TValue : IComparable - { - if (!target.IsBetween(lower, upper)) - { - throw new ArgumentException($"Value must be between {lower} and {upper}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Enum(TEnum target, string parameterName) where TEnum : struct - { - if (!target.IsEnumValue()) - { - throw new ArgumentException($"Value must be a valid enum type {typeof(TEnum)}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void GreaterThan(TValue target, TValue lower, string parameterName) where TValue : IComparable - { - if (target.CompareTo(lower) <= 0) - { - throw new ArgumentException($"Value must be greater than {lower}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void GreaterEquals(TValue target, TValue lower, string parameterName) where TValue : IComparable - { - if (target.CompareTo(lower) < 0) - { - throw new ArgumentException($"Value must be greater or equals than {lower}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void LessThan(TValue target, TValue upper, string parameterName) where TValue : IComparable - { - if (target.CompareTo(upper) >= 0) - { - throw new ArgumentException($"Value must be less than {upper}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void LessEquals(TValue target, TValue upper, string parameterName) where TValue : IComparable - { - if (target.CompareTo(upper) > 0) - { - throw new ArgumentException($"Value must be less or equals than {upper}", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NotEmpty(ICollection enumerable, string parameterName) - { - NotNull(enumerable, parameterName); - - if (enumerable.Count == 0) - { - throw new ArgumentException("Collection does not contain an item", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NotEmpty(Guid target, string parameterName) - { - if (target == Guid.Empty) - { - throw new ArgumentException("Value cannot be empty.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NotNull(object target, string parameterName) - { - if (target == null) - { - throw new ArgumentNullException(parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NotDefault(T target, string parameterName) - { - if (Equals(target, default(T))) - { - throw new ArgumentException("Value cannot be an the default value", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void NotNullOrEmpty(string target, string parameterName) - { - NotNull(target, parameterName); - - if (string.IsNullOrWhiteSpace(target)) - { - throw new ArgumentException("String parameter cannot be null or empty and cannot contain only blanks.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void ValidFileName(string target, string parameterName) - { - NotNullOrEmpty(target, parameterName); - - if (target.Intersect(Path.GetInvalidFileNameChars()).Any()) - { - throw new ArgumentException("Value contains an invalid character.", parameterName); - } - } - - [DebuggerStepThrough] - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static void Valid(IValidatable target, string parameterName, Func message) - { - NotNull(target, parameterName); - - target.Validate(message); - } - } -} diff --git a/src/Squidex/app/components/internal/app/schemas/schemas-page.component.html b/src/Squidex/app/components/internal/app/schemas/schemas-page.component.html index c0460f42b..a5d8c8595 100644 --- a/src/Squidex/app/components/internal/app/schemas/schemas-page.component.html +++ b/src/Squidex/app/components/internal/app/schemas/schemas-page.component.html @@ -4,7 +4,7 @@
- +

Schemas diff --git a/src/Squidex/app/components/internal/app/settings/clients-page.component.html b/src/Squidex/app/components/internal/app/settings/clients-page.component.html index 402805320..4da97c151 100644 --- a/src/Squidex/app/components/internal/app/settings/clients-page.component.html +++ b/src/Squidex/app/components/internal/app/settings/clients-page.component.html @@ -82,7 +82,7 @@

- +
diff --git a/src/Squidex/app/components/internal/app/settings/languages-page.component.html b/src/Squidex/app/components/internal/app/settings/languages-page.component.html index b348ba656..088fb117d 100644 --- a/src/Squidex/app/components/internal/app/settings/languages-page.component.html +++ b/src/Squidex/app/components/internal/app/settings/languages-page.component.html @@ -5,7 +5,7 @@
- +

diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs new file mode 100644 index 000000000..470f1878c --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/CQRS/DomainObjectTest.cs @@ -0,0 +1,137 @@ +// ========================================================================== +// DomainObjectTest.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using Squidex.Infrastructure.CQRS.Events; +using Xunit; +using System.Linq; + +// ReSharper disable ConvertToConstant.Local + +namespace Squidex.Infrastructure.CQRS +{ + public class DomainObjectTest + { + private sealed class Event : IEvent + { + } + + private sealed class UserDomainObject : DomainObject + { + public UserDomainObject(Guid id, int version) + : base(id, version) + { + } + + public void RaiseTestEvent(IEvent @event) + { + RaiseEvent(@event); + } + + protected override void DispatchEvent(Envelope @event) + { + } + } + + [Fact] + public void Should_instantiate() + { + var id = Guid.NewGuid(); + var ver = 123; + var sut = new UserDomainObject(id, ver); + + Assert.Equal(id, sut.Id); + Assert.Equal(ver, sut.Version); + } + + [Fact] + public void Should_add_event_to_uncommitted_events_and_increase_version_when_raised() + { + var event1 = new Event(); + var event2 = new Event(); + + var sut = new UserDomainObject(Guid.NewGuid(), 10); + + IAggregate aggregate = sut; + + sut.RaiseTestEvent(event1); + sut.RaiseTestEvent(event2); + + Assert.Equal(12, sut.Version); + + Assert.Equal(new IEvent[] { event1, event2 }, aggregate.GetUncomittedEvents().Select(x => x.Payload).ToArray()); + + aggregate.ClearUncommittedEvents(); + + Assert.Equal(0, sut.GetUncomittedEvents().Count); + } + + [Fact] + public void Should_not_add_event_to_uncommitted_events_and_increase_version_when_raised() + { + var event1 = new Event(); + var event2 = new Event(); + + var sut = new UserDomainObject(Guid.NewGuid(), 10); + + IAggregate aggregate = sut; + + aggregate.ApplyEvent(new Envelope(event1)); + aggregate.ApplyEvent(new Envelope(event2)); + + Assert.Equal(12, sut.Version); + Assert.Equal(0, sut.GetUncomittedEvents().Count); + } + + [Fact] + public void Should_make_correct_equal_comparisons() + { + var id1 = Guid.NewGuid(); + var id2 = Guid.NewGuid(); + + var user1a = new UserDomainObject(id1, 1); + var user1b = new UserDomainObject(id1, 2); + var user2 = new UserDomainObject(id2, 2); + + Assert.True(user1a.Equals(user1b)); + + Assert.False(user1a.Equals(user2)); + } + + [Fact] + public void Should_make_correct_object_equal_comparisons() + { + var id1 = Guid.NewGuid(); + var id2 = Guid.NewGuid(); + + var user1a = new UserDomainObject(id1, 1); + + object user1b = new UserDomainObject(id1, 2); + object user2 = new UserDomainObject(id2, 2); + + Assert.True(user1a.Equals(user1b)); + + Assert.False(user1a.Equals(user2)); + } + + [Fact] + public void Should_provide_correct_hash_codes() + { + var id1 = Guid.NewGuid(); + var id2 = Guid.NewGuid(); + + var user1a = new UserDomainObject(id1, 1); + var user1b = new UserDomainObject(id1, 2); + var user2 = new UserDomainObject(id2, 2); + + Assert.Equal(user1a.GetHashCode(), user1b.GetHashCode()); + + Assert.NotEqual(user1a.GetHashCode(), user2.GetHashCode()); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/CQRS/EventStore/DefaultNameResolverTests.cs b/tests/Squidex.Infrastructure.Tests/CQRS/EventStore/DefaultNameResolverTests.cs index a576e2484..1dd3d3e86 100644 --- a/tests/Squidex.Infrastructure.Tests/CQRS/EventStore/DefaultNameResolverTests.cs +++ b/tests/Squidex.Infrastructure.Tests/CQRS/EventStore/DefaultNameResolverTests.cs @@ -55,7 +55,7 @@ namespace Squidex.Infrastructure.CQRS.EventStore var sut = new DefaultNameResolver("Squidex"); var user = new UserDomainObject(Guid.NewGuid(), 1); - var name = sut.GetStreamName(typeof(User), user.Id); + var name = sut.GetStreamName(typeof(UserDomainObject), user.Id); Assert.Equal($"squidex-user-{user.Id}", name); } diff --git a/tests/Squidex.Infrastructure.Tests/Security/ExtensionsTests.cs b/tests/Squidex.Infrastructure.Tests/Security/ExtensionsTests.cs new file mode 100644 index 000000000..747f6d0a9 --- /dev/null +++ b/tests/Squidex.Infrastructure.Tests/Security/ExtensionsTests.cs @@ -0,0 +1,69 @@ +// ========================================================================== +// ExtensionsTests.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System; +using System.Security.Claims; +using Xunit; + +namespace Squidex.Infrastructure.Security +{ + public class ExtensionsTests + { + [Fact] + public void Should_retrieve_subject() + { + TestClaimExtension(OpenIdClaims.Subject, x => x.OpenIdSubject()); + } + + [Fact] + public void Should_retrieve_client_id() + { + TestClaimExtension(OpenIdClaims.ClientId, x => x.OpenIdClientId()); + } + + [Fact] + public void Should_retrieve_preferred_user_name() + { + TestClaimExtension(OpenIdClaims.PreferredUserName, x => x.OpenIdPreferredUserName()); + } + + [Fact] + public void Should_retrieve_name() + { + TestClaimExtension(OpenIdClaims.Name, x => x.OpenIdName()); + } + + [Fact] + public void Should_retrieve_nickname() + { + TestClaimExtension(OpenIdClaims.NickName, x => x.OpenIdNickName()); + } + + [Fact] + public void Should_retrieve_email() + { + TestClaimExtension(OpenIdClaims.Email, x => x.OpenIdEmail()); + } + + private static void TestClaimExtension(string claimType, Func getter) + { + var claimValue = Guid.NewGuid().ToString(); + + var claimsIdentity = new ClaimsIdentity(); + var claimsPrincipal = new ClaimsPrincipal(); + + claimsIdentity.AddClaim(new Claim(claimType, claimValue)); + + Assert.Null(getter(claimsPrincipal)); + + claimsPrincipal.AddIdentity(claimsIdentity); + + Assert.Equal(claimValue, getter(claimsPrincipal)); + } + } +} diff --git a/tests/Squidex.Infrastructure.Tests/UserTokenTests.cs b/tests/Squidex.Infrastructure.Tests/UserTokenTests.cs index 1effb0188..bb9615219 100644 --- a/tests/Squidex.Infrastructure.Tests/UserTokenTests.cs +++ b/tests/Squidex.Infrastructure.Tests/UserTokenTests.cs @@ -83,7 +83,7 @@ namespace Squidex.Infrastructure { var token1a = UserToken.Parse("client:client1"); var token1b = UserToken.Parse("client:client1"); - var token2 = UserToken.Parse("client:client2"); + var token2 = UserToken.Parse("client:client2"); Assert.True(token1a.Equals(token1b)); @@ -108,7 +108,7 @@ namespace Squidex.Infrastructure { var token1a = UserToken.Parse("client:client1"); var token1b = UserToken.Parse("client:client1"); - var token2 = UserToken.Parse("client:client2"); + var token2 = UserToken.Parse("client:client2"); Assert.Equal(token1a.GetHashCode(), token1b.GetHashCode());