public async Task ValidateAsync_TrackExists_DoesNothing()
        {
            // Arrange
            var trackContainer = new Mock <ITrackContainer>();

            var track           = new Track();
            var trackDataAccess = new Mock <ITrackDataAccess>();

            trackDataAccess.Setup(x => x.GetByAsync(trackContainer.Object)).ReturnsAsync(track);

            var trackGetService = new TrackGetService(trackDataAccess.Object);

            // Act
            var action = new Func <Task>(() => trackGetService.ValidateAsync(trackContainer.Object));

            // Assert
            await action.Should().NotThrowAsync <Exception>();
        }
        public async Task ValidateAsync_TrackNotExists_ThrowsError()
        {
            // Arrange
            var fixture = new Fixture();
            var id      = fixture.Create <int>();

            var trackContainer = new Mock <ITrackContainer>();

            trackContainer.Setup(x => x.TrackId).Returns(id);

            var track           = new Track();
            var trackDataAccess = new Mock <ITrackDataAccess>();

            trackDataAccess.Setup(x => x.GetByAsync(trackContainer.Object)).ReturnsAsync((Track)null);

            var trackGetService = new TrackGetService(trackDataAccess.Object);

            // Act
            var action = new Func <Task>(() => trackGetService.ValidateAsync(trackContainer.Object));

            // Assert
            await action.Should().ThrowAsync <InvalidOperationException>($"Track not found by id {id}");
        }