Пример #1
0
        public async Task Can_delete_archived_resource()
        {
            // Arrange
            TelevisionBroadcast broadcast = _fakers.TelevisionBroadcast.Generate();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Broadcasts.Add(broadcast);
                await dbContext.SaveChangesAsync();
            });

            string route = "/televisionBroadcasts/" + broadcast.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecuteDeleteAsync <string>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                TelevisionBroadcast broadcastInDatabase = await dbContext.Broadcasts.FirstWithIdOrDefaultAsync(broadcast.Id);

                broadcastInDatabase.Should().BeNull();
            });
        }
Пример #2
0
        public async Task Cannot_delete_unarchived_resource()
        {
            // Arrange
            TelevisionBroadcast broadcast = _fakers.TelevisionBroadcast.Generate();

            broadcast.ArchivedAt = null;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Broadcasts.Add(broadcast);
                await dbContext.SaveChangesAsync();
            });

            string route = "/televisionBroadcasts/" + broadcast.StringId;

            // Act
            (HttpResponseMessage httpResponse, ErrorDocument responseDocument) = await _testContext.ExecuteDeleteAsync <ErrorDocument>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.Forbidden);

            responseDocument.Errors.Should().HaveCount(1);

            Error error = responseDocument.Errors[0];

            error.StatusCode.Should().Be(HttpStatusCode.Forbidden);
            error.Title.Should().Be("Television broadcasts must first be archived before they can be deleted.");
            error.Detail.Should().BeNull();
        }
Пример #3
0
        public async Task Can_get_unarchived_resource_by_ID()
        {
            // Arrange
            TelevisionBroadcast broadcast = _fakers.TelevisionBroadcast.Generate();

            broadcast.ArchivedAt = null;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Broadcasts.Add(broadcast);
                await dbContext.SaveChangesAsync();
            });

            string route = "/televisionBroadcasts/" + broadcast.StringId;

            // Act
            (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecuteGetAsync <Document>(route);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.OK);

            responseDocument.SingleData.Should().NotBeNull();
            responseDocument.SingleData.Id.Should().Be(broadcast.StringId);
            responseDocument.SingleData.Attributes["archivedAt"].Should().BeNull();
        }
Пример #4
0
        public async Task Cannot_create_archived_resource()
        {
            // Arrange
            TelevisionBroadcast newBroadcast = _fakers.TelevisionBroadcast.Generate();

            var requestBody = new
            {
                data = new
                {
                    type       = "televisionBroadcasts",
                    attributes = new
                    {
                        title      = newBroadcast.Title,
                        airedAt    = newBroadcast.AiredAt,
                        archivedAt = newBroadcast.ArchivedAt
                    }
                }
            };

            const string route = "/televisionBroadcasts";

            // Act
            (HttpResponseMessage httpResponse, ErrorDocument responseDocument) = await _testContext.ExecutePostAsync <ErrorDocument>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.Forbidden);

            responseDocument.Errors.Should().HaveCount(1);

            Error error = responseDocument.Errors[0];

            error.StatusCode.Should().Be(HttpStatusCode.Forbidden);
            error.Title.Should().Be("Television broadcasts cannot be created in archived state.");
            error.Detail.Should().BeNull();
        }
Пример #5
0
        public async Task Can_create_unarchived_resource()
        {
            // Arrange
            TelevisionBroadcast newBroadcast = _fakers.TelevisionBroadcast.Generate();

            var requestBody = new
            {
                data = new
                {
                    type       = "televisionBroadcasts",
                    attributes = new
                    {
                        title   = newBroadcast.Title,
                        airedAt = newBroadcast.AiredAt
                    }
                }
            };

            const string route = "/televisionBroadcasts";

            // Act
            (HttpResponseMessage httpResponse, Document responseDocument) = await _testContext.ExecutePostAsync <Document>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.Created);

            responseDocument.SingleData.Should().NotBeNull();
            responseDocument.SingleData.Attributes["title"].Should().Be(newBroadcast.Title);
            responseDocument.SingleData.Attributes["airedAt"].Should().BeCloseTo(newBroadcast.AiredAt);
            responseDocument.SingleData.Attributes["archivedAt"].Should().BeNull();
        }
Пример #6
0
        public async Task Can_archive_resource()
        {
            // Arrange
            TelevisionBroadcast existingBroadcast = _fakers.TelevisionBroadcast.Generate();

            existingBroadcast.ArchivedAt = null;

            DateTimeOffset newArchivedAt = _fakers.TelevisionBroadcast.Generate().ArchivedAt !.Value;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Broadcasts.Add(existingBroadcast);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "televisionBroadcasts",
                    id         = existingBroadcast.StringId,
                    attributes = new
                    {
                        archivedAt = newArchivedAt
                    }
                }
            };

            string route = "/televisionBroadcasts/" + existingBroadcast.StringId;

            // Act
            (HttpResponseMessage httpResponse, string responseDocument) = await _testContext.ExecutePatchAsync <string>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.NoContent);

            responseDocument.Should().BeEmpty();

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                TelevisionBroadcast broadcastInDatabase = await dbContext.Broadcasts.FirstWithIdAsync(existingBroadcast.Id);

                broadcastInDatabase.ArchivedAt.Should().BeCloseTo(newArchivedAt);
            });
        }
Пример #7
0
        public async Task Cannot_shift_archive_date()
        {
            // Arrange
            TelevisionBroadcast broadcast = _fakers.TelevisionBroadcast.Generate();

            DateTimeOffset?newArchivedAt = _fakers.TelevisionBroadcast.Generate().ArchivedAt;

            await _testContext.RunOnDatabaseAsync(async dbContext =>
            {
                dbContext.Broadcasts.Add(broadcast);
                await dbContext.SaveChangesAsync();
            });

            var requestBody = new
            {
                data = new
                {
                    type       = "televisionBroadcasts",
                    id         = broadcast.StringId,
                    attributes = new
                    {
                        archivedAt = newArchivedAt
                    }
                }
            };

            string route = "/televisionBroadcasts/" + broadcast.StringId;

            // Act
            (HttpResponseMessage httpResponse, ErrorDocument responseDocument) = await _testContext.ExecutePatchAsync <ErrorDocument>(route, requestBody);

            // Assert
            httpResponse.Should().HaveStatusCode(HttpStatusCode.Forbidden);

            responseDocument.Errors.Should().HaveCount(1);

            Error error = responseDocument.Errors[0];

            error.StatusCode.Should().Be(HttpStatusCode.Forbidden);
            error.Title.Should().Be("Archive date of television broadcasts cannot be shifted. Unarchive it first.");
            error.Detail.Should().BeNull();
        }