public void TaskListsRepositoryRemoveShareCallsDeleteFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.RemoveShare(taskList, user.RowKey);

            // Assert
            unitOfWorkMock.Verify(uow => uow.Delete<TaskListShareEntity>("TaskListShares", string.Format("{0}+{1}", TaskList1PartitionKey, _taskList1RowKey), User1RowKey), Times.Once());
        }
        public void TaskListsRepositoryUpdateCallsUpdateFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.Update(taskList);

            // Assert
            unitOfWorkMock.Verify(uow => uow.Update("TaskLists", It.IsAny<TaskListEntity>()), Times.Once());
        }
        public void TaskListsRepositoryHasPermisionToEditCallsGetFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var taskListShare = new TaskListShareEntity(string.Format("{0}+{1}", TaskList1PartitionKey, _taskList1RowKey), User1RowKey);
            taskList.Share.Add(user);

            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(u => u.Get("TaskListShares", It.IsAny<Expression<Func<TaskListShareEntity, bool>>>())).Returns(taskListShare);
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            var result = repository.HasPermissionToEdit(user, taskList);

            // Assert
            Assert.IsTrue(result);
            unitOfWorkMock.Verify(uow => uow.Get("TaskListShares", It.IsAny<Expression<Func<TaskListShareEntity, bool>>>()), Times.Once());
        }
        public void TaskListsRepositoryLoadCallsLoadFromTheUnitOfWork()
        {
            // Arrange
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(u => u.Load<TaskListEntity>(It.Is<string>(s => s == "TaskLists"))).Returns(BuildTaskListsTable());
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            var result = repository.Load().ToList();

            // Assert
            Assert.IsTrue(result.Count() == 2);
            unitOfWorkMock.Verify(uow => uow.Load<TaskListEntity>("TaskLists"), Times.Once());
        }
        public void TaskListsRepositoryGetCallsWithFilterGetFromTheUnitOfWorkAndReturnsAExistingTaskList()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(u => u.Get("TaskLists", It.IsAny<Expression<Func<TaskList, bool>>>())).Returns(taskList);
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            var result = repository.Get(n => n.PartitionKey == Note1PartitionKey && n.RowKey == _note1RowKey);

            // Assert
            Assert.IsNotNull(result);
            unitOfWorkMock.Verify(uow => uow.Get("TaskLists", It.IsAny<Expression<Func<TaskList, bool>>>()), Times.Once());
        }
        public void TaskListsRepositoryGetSharedCallsLoadFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskListEntity(TaskList1PartitionKey, _taskList1RowKey);
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(u => u.Load("TaskListShares", It.IsAny<Expression<Func<TaskListShareEntity, bool>>>())).Returns(BuildTaskListSharesTable());
            unitOfWorkMock.Setup(u => u.Get("TaskLists", It.IsAny<Expression<Func<TaskListEntity, bool>>>())).Returns(taskList);
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            var result = repository.GetShared(user);

            // Assert
            Assert.IsTrue(result.Count() == 2);
            unitOfWorkMock.Verify(uow => uow.Load("TaskListShares", It.IsAny<Expression<Func<TaskListShareEntity, bool>>>()), Times.Once());
            unitOfWorkMock.Verify(uow => uow.Get("TaskLists", It.IsAny<Expression<Func<TaskListEntity, bool>>>()), Times.Exactly(2));
        }
        public void TaskListsRepositoryGetCallsGetFromTheUnitOfWorkAndReturnsNullForANonExistingTaskList()
        {
            // Arrange
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            var result = repository.Get(TaskList3PartitionKey, _taskList3RowKey);

            // Assert
            Assert.IsNull(result);
            unitOfWorkMock.Verify(uow => uow.Get("TaskLists", It.IsAny<Expression<Func<TaskListEntity, bool>>>()), Times.Once());
        }
        public void TaskListsRepositoryDeleteCallsDeleteFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(uow => uow.Load("TaskListShares", It.IsAny<Expression<Func<TaskListShareEntity, bool>>>())).Returns(BuildTaskListSharesTable());
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.Delete(taskList);

            // Assert
            unitOfWorkMock.Verify(uow => uow.Delete<TaskListEntity>("TaskLists", TaskList1PartitionKey, _taskList1RowKey), Times.Once());
            unitOfWorkMock.Verify(uow => uow.Delete<TaskListShareEntity>("TaskListShares", string.Format("{0}+{1}", TaskList1PartitionKey, _taskList1RowKey), User1RowKey), Times.Once());
            unitOfWorkMock.Verify(uow => uow.Delete<TaskListShareEntity>("TaskListShares", string.Format("{0}+{1}", TaskList1PartitionKey, _taskList1RowKey), User3RowKey), Times.Once());
        }
        public void TaskListsRepositoryCreateCallsCreatesFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user);
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.Create(taskList);

            // Assert
            Assert.IsTrue(taskList.PartitionKey != string.Empty);
            Assert.IsTrue(taskList.RowKey != string.Empty);
            unitOfWorkMock.Verify(uow => uow.Create(It.IsAny<TaskListEntity>(), "TaskLists"), Times.Once());
            unitOfWorkMock.Verify(uow => uow.Create(It.IsAny<TaskListShareEntity>(), "TaskListShares"), Times.Once());
        }
        public void TaskListsRepositoryAddShareCallsCreateFromTheUnitOfWork()
        {
            // Arrange
            var user = new User { PartitionKey = User1PartitionKey, RowKey = User1RowKey };
            var taskList = new TaskList("Test title", user) { PartitionKey = TaskList1PartitionKey, RowKey = _taskList1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.AddShare(taskList, user.RowKey);

            // Assert
            unitOfWorkMock.Verify(uow => uow.Create(It.IsAny<TaskListShareEntity>(), "TaskListShares"), Times.Once());
        }
        public void TaskListRepositoryLoadContainerCallsGetsFromTheUnitOfWork()
        {
            // Arrange
            var taskList = new TaskListEntity(TaskList1PartitionKey, _taskList1RowKey);
            var taskListNote = new TaskListEntity { PartitionKey = string.Format("{0}+{1}", TaskList1PartitionKey, _taskList1RowKey),
                                                    RowKey = string.Format("{0}+{1}", Note1PartitionKey, _note1RowKey) };
            var note = new Note { PartitionKey = Note1PartitionKey, RowKey = _note1RowKey };
            var unitOfWorkMock = new Mock<IUnitOfWork>();
            unitOfWorkMock.Setup(u => u.Get("TaskListNotes", It.IsAny<Expression<Func<TaskListEntity, bool>>>())).Returns(taskListNote);
            unitOfWorkMock.Setup(u => u.Get("TaskLists", It.IsAny<Expression<Func<TaskListEntity, bool>>>())).Returns(taskList);
            var repository = new TaskListsRepository(unitOfWorkMock.Object);

            // Act
            repository.LoadContainer(note);

            // Assert
            Assert.IsNotNull(note.Container);
            unitOfWorkMock.Verify(uow => uow.Get("TaskListNotes", It.IsAny<Expression<Func<TaskListEntity, bool>>>()), Times.Once());
            unitOfWorkMock.Verify(uow => uow.Get("TaskLists", It.IsAny<Expression<Func<TaskListEntity, bool>>>()), Times.Once());
        }