Ejemplo n.º 1
0
        public void NewTag_ShouldReturnTagBetween1And9999()
        {
            var oneMillion = 1000000;

            for (int i = 0; i < oneMillion; i++)
            {
                var tag = DiscriminatorTag.NewTag();
                Assert.True(tag.Value >= 1 && tag.Value <= 9999);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Generates a new DiscriminatorTag for the given display name.
        /// </summary>
        /// <param name="displayName">The user display name.</param>
        /// <returns>A new tag for this display name.</returns>
        public async Task <DiscriminatorTag> GenerateDiscriminatorTagAsync(string displayName)
        {
            var tag        = DiscriminatorTag.NewTag();
            var tagIsInUse = (await _accountRepository.GetFirstAsync(new NameTagEqualSpecification(tag, displayName)) != null);

            while (tagIsInUse)
            {
                tag        = DiscriminatorTag.NewTag();
                tagIsInUse = (await _accountRepository.GetFirstAsync(new NameTagEqualSpecification(tag, displayName)) != null);
            }
            return(tag);
        }
Ejemplo n.º 3
0
        public async Task <FriendshipRequestResult> SendFriendshipRequest(SendFriendshipRequestDto friendshipRequestDto)
        {
            var validationResult = AnnotationValidator.TryValidate(friendshipRequestDto);

            if (validationResult.Failed)
            {
                if (friendshipRequestDto.From.NameTag == friendshipRequestDto.ToNameTag)
                {
                    return(FriendshipRequestResult.Fail(validationResult.Error.ToErrorList().AddError("ToNameTag", "Cannot send a friendship request to yourself.")));
                }
                return(FriendshipRequestResult.Fail(validationResult.Error.ToErrorList()));
            }

            if (friendshipRequestDto.From.NameTag == friendshipRequestDto.ToNameTag)
            {
                return(FriendshipRequestResult.Fail(new ErrorList().AddError("ToNameTag", "Cannot send a friendship request to yourself.")));
            }

            var nameTag     = friendshipRequestDto.ToNameTag.Split('#');
            var displayName = nameTag[0];
            var tag         = DiscriminatorTag.Parse(nameTag[1]);
            var toUser      = await _accountRepository.GetFirstAsync(new NameTagEqualSpecification(tag, displayName));

            if (toUser == null)
            {
                return(FriendshipRequestResult.Fail(new ErrorList().AddError("ToNameTag", "User does not exists.")));
            }

            var isAlreadyFriend = await _friendshipRepository.GetFirstAsync(new FriendshipExistsSpecification(friendshipRequestDto.From.Id, toUser.Id));

            if (isAlreadyFriend != null)
            {
                var errorMessage = isAlreadyFriend.Accepted
                    ? "You are already friends with this user"
                    : isAlreadyFriend.FromId == friendshipRequestDto.From.Id
                        ? "You have already sent a friendship request to this user."
                        : "The user has already sent a friendship request to you.";
                return(FriendshipRequestResult.Fail(new ErrorList().AddError("Friendship", errorMessage)));
            }

            var friendship = new Friendship(friendshipRequestDto.From, toUser);

            await _friendshipRepository.InsertAsync(friendship);

            await _friendshipRepository.CommitAsync();

            return(FriendshipRequestResult.Ok(friendship));
        }
Ejemplo n.º 4
0
 public void TryParse_ShouldParseValuesCorrectly(object value, bool isValidTag)
 {
     if (DiscriminatorTag.TryParse(value, out var tag))
     {
         if (isValidTag)
         {
             Assert.Equal(value.ToString().PadLeft(4, '0'), tag.ToString());
             Assert.Equal(ushort.Parse(value.ToString()), tag.Value);
         }
         else
         {
             Assert.Equal("0000", tag.ToString());
             Assert.Equal(0, tag.Value);
         }
     }
 }
Ejemplo n.º 5
0
 public NameTagEqualSpecification(DiscriminatorTag tag, string userName)
 {
     Expression = u => u.DisplayName == userName && u.Tag == tag;
 }
Ejemplo n.º 6
0
        protected override void OnModelCreating(ModelBuilder builder)
        {
            base.OnModelCreating(builder);
            builder.Entity <ApplicationUser>(b =>
            {
                b.Property(u => u.DisplayName)
                .IsRequired()
                .HasMaxLength(40);

                b.Property(u => u.Tag)
                .HasConversion(
                    (tag) => tag.Value,
                    (value) => DiscriminatorTag.Parse(value)
                    )
                .IsRequired()
                .HasMaxLength(4);

                b.HasIndex(u => new { u.Tag, u.DisplayName }).IsUnique();

                b.HasMany(u => u.Servers)
                .WithMany(s => s.Members);
            });

            builder.Entity <Server>(b =>
            {
                b.HasKey(s => s.Id);

                b.Property(s => s.Name)
                .IsRequired()
                .HasMaxLength(50);

                b.Property(s => s.Description)
                .HasMaxLength(300);

                b.Property(s => s.PrivacyLevel)
                .HasColumnType("varchar(10)")
                .IsRequired()
                .HasConversion(
                    (privacyLevel) => privacyLevel.ToString(),
                    (value) => Enum.Parse <ServerPrivacy>(value)
                    );

                b.HasMany(s => s.Members)
                .WithMany(m => m.Servers);

                b.HasMany(s => s.Roles)
                .WithOne(r => r.Server);

                b.HasMany(s => s.Categories)
                .WithOne(c => c.Server);
            });

            builder.Entity <ServerRole>(b =>
            {
                b.HasOne(r => r.Server)
                .WithMany(s => s.Roles);
            });

            builder.Entity <Category>(b =>
            {
                b.HasKey(c => c.Id);

                b.Property(c => c.Name)
                .IsRequired()
                .HasMaxLength(80);

                b.HasOne(c => c.Server)
                .WithMany(s => s.Categories);
            });

            builder.Entity <Friendship>(b =>
            {
                b.HasKey(f => new { f.FromId, f.ToId });

                b.HasOne(c => c.To);
                b.HasOne(c => c.From);
            });

            builder.Entity <DirectMessage>(b =>
            {
                b.HasKey(f => f.Id);

                b.Property(f => f.Text)
                .IsRequired()
                .HasMaxLength(400);

                b.HasOne(c => c.To);
                b.HasOne(c => c.From);
            });
        }
Ejemplo n.º 7
0
 public TagEqualSpecification(DiscriminatorTag tag)
 {
     Expression = u => u.Tag == tag;
 }