public void CreateAsyncShouldThrowInvalidOperationExceptionIfUserIsNull()
        {
            var userManager = this.GetUserManagerMock().Object;

            var receiptService = new Mock <IReceiptService>().Object;

            var db = DbInfrastructure.GetDatabase();

            var packageService = new PackageService(db, receiptService, userManager);

            Func <Task> func = async() => await packageService
                               .CreateAsync("Descr", 15, "Some Address", Guid.NewGuid().ToString());

            func.Should().Throw <InvalidOperationException>();
        }
        public async Task CreateAsyncShouldCreateAndSavePackageToDb()
        {
            var db = DbInfrastructure.GetDatabase();

            var mockUserManager = this.GetUserManagerMock();

            mockUserManager
            .Setup(m => m.FindByIdAsync(It.IsAny <string>()))
            .Returns((string id) => db.Users.SingleOrDefaultAsync(u => u.Id == id));

            var receiptService = new Mock <IReceiptService>().Object;

            var packageService = new PackageService(db, receiptService, mockUserManager.Object);

            var user = new User
            {
                UserName = "******"
            };

            await db.AddAsync(user);

            await db.SaveChangesAsync();

            var model = await packageService.CreateAsync(Description, Weight, ShippingAddress, user.Id);

            var package = await db.Packages.FirstOrDefaultAsync();

            package
            .Should()
            .Match <Package>(p => p.Description == Description)
            .And
            .Match <Package>(p => p.RecipientId == user.Id)
            .And
            .Match <Package>(p => p.ShippingAddress == ShippingAddress)
            .And
            .Match <Package>(p => p.Status == Status.Pending)
            .And
            .Match <Package>(p => p.Weight == Weight);
        }