namespace Tests
{
using System;
using NUnit.Framework;
using Domain;
using DataContracts;
using Mapper;
[TestFixture]
public class ObjectMapperTests
{
[Test]
public void Given_a_non_existing_mapping_when_mapping_object_then_should_throw_InvalidOperationException()
{
// arrange
IObjectMapper mapper = new ObjectMapper();
var albumDetail = new AlbumDetail();
// act/assert
Assert.Throws<InvalidOperationException>(() =>
// non-existing mapping
mapper.Map<AlbumDetail, AlbumSummary>(albumDetail)
);
}
[Test, TestCaseSource("AlbumSummaryTestCases")]
public void Given_an_album_when_mapping_to_album_summary_should_equals_expected_album_summary(Album album, AlbumSummary expectedAlbumSummary)
{
// arrange
IObjectMapper mapper = new ObjectMapper();
// act
AlbumSummary albumSummary = mapper.Map<Album, AlbumSummary>(album);
// assert
Assert.AreEqual(albumSummary, expectedAlbumSummary);
}
[Test, TestCaseSource("AlbumDetailTestCases")]
public void Given_an_album_when_mapping_to_album_detail_should_equals_expected_album_detail(Album album, AlbumDetail expectedAlbumDetail)
{
// arrange
IObjectMapper mapper = new ObjectMapper();
// act
AlbumDetail albumDetail = mapper.Map<Album, AlbumDetail>(album);
// assert
Assert.AreEqual(albumDetail, expectedAlbumDetail);
}
#region Test cases
private static object[] AlbumDetailTestCases =
{
new object[] {
null,
null
},
new object[] {
new Album(),
new AlbumDetail()
}
// TO-DO: Add more test cases
};
private static object[] AlbumSummaryTestCases =
{
new object[] {
null,
null
},
new object[] {
new Album(),
new AlbumSummary()
},
new object[] {
new Album {
AlbumId = 1,
Price = 10.0m,
Title = "The Dreamer",
Artist = new Artist {
ArtistId = 1,
Name = "José James"
},
Genre = new Genre {
GenreId = 1,
Name = "Jazz"
}
},
// expected mapped object
new AlbumSummary{
AlbumId = 1,
ArtistName = "José James",
Title = "The Dreamer"
}
},
new object[] {
new Album {
AlbumId = 2,
Price = 12.0m,
Title = "Final Conversation of Kings",
Artist = new Artist {
ArtistId = 2,
Name = "The Butterfly Effect"
},
Genre = new Genre {
GenreId = 2,
Name = "Progressive Rock"
}
},
// expected mapped object
new AlbumSummary {
AlbumId = 2,
ArtistName = "The Butterfly Effect",
Title = "Final Conversation of Kings"
}
},
new object[] {
new Album {
AlbumId = 4,
Price = 10.0m,
Title = "Heritage",
Artist = new Artist {
ArtistId = 4,
Name = "Opeth"
},
Genre = new Genre {
GenreId = 4,
Name = "Metal"
}
},
// expected mapped object
new AlbumSummary {
AlbumId = 4,
ArtistName = "Opeth",
Title = "Heritage"
}
}
};
#endregion
}
}