private async Task <CodeFileEntity> StoreEntityAsync(CodeFileEntity entity)
        {
            var operation = TableOperation.InsertOrReplace(entity);
            var result    = await _codeFileTable.ExecuteAsync(operation);

            return((CodeFileEntity)result.Result);
        }
        public async Task <CodeFile> StoreAsync(CodeFile file)
        {
            var entity = new CodeFileEntity
            {
                PartitionKey  = ConstructPartitionKey(file.FilePath),
                RowKey        = EntityRowKey,
                Path          = file.FilePath,
                CodeFragments = JsonConvert.SerializeObject(file.CodeFragments)
            };
            var storedEntity = await StoreEntityAsync(entity);

            return(new CodeFile
            {
                FilePath = storedEntity.Path,
                CodeFragments = JsonConvert.DeserializeObject <List <CodeFragment> >(storedEntity.CodeFragments)
            });
        }
        public async Task ArchiveAsync_ArchiveCodeFileEntity_ReturnsCorrectCodeFile()
        {
            // Arrange
            var codeFragmentsJson = @"[{
                ""Identifier"":""test_identifier"",
                ""Content"":""test content"",
                ""Language"":""c_"",
                ""Platform"":""_net"",
                ""Codename"":""test_identifier_net""
            }]";

            var expectedCodeFragment = new CodeFragment
            {
                Identifier = "test_identifier",
                Content    = "test content",
                Language   = "c_",
                Platform   = "_net",
            };

            var expectedResult = new CodeFile
            {
                FilePath      = TestFilePath,
                CodeFragments = new List <CodeFragment> {
                    expectedCodeFragment
                }
            };

            var archivedCodeFileEntity = new CodeFileEntity {
                IsArchived = true, CodeFragments = codeFragmentsJson
            };

            _codeFileTable
            .ExecuteAsync(TableOperation.InsertOrReplace(archivedCodeFileEntity))
            .Returns(new TableResult
            {
                Result = new CodeFileEntity
                {
                    IsArchived    = true,
                    CodeFragments = codeFragmentsJson,
                }
            });

            _codeFileTable
            .ExecuteAsync(Arg.Any <TableOperation>())
            .Returns(new TableResult
            {
                Result = new CodeFileEntity
                {
                    IsArchived    = false,
                    Path          = TestFilePath,
                    CodeFragments = codeFragmentsJson,
                }
            });

            var codeFileRepository = new CodeFileRepository(_codeFileTable);

            // Act
            var actualResult = await codeFileRepository.ArchiveAsync(TestFilePath);

            // Assert
            Assert.That(actualResult, Is.EqualTo(expectedResult).UsingCodeFileComparer());
        }