Skip to content

Commit c99f31f

Browse files
author
Anand Rajneesh
committed
[#23] Fongo unit testing
1 parent e9c8d79 commit c99f31f

File tree

6 files changed

+237
-0
lines changed

6 files changed

+237
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
package org.gluecoders.library.dao;
2+
3+
import com.lordofthejars.nosqlunit.annotation.ShouldMatchDataSet;
4+
import com.lordofthejars.nosqlunit.annotation.UsingDataSet;
5+
import com.lordofthejars.nosqlunit.core.LoadStrategyEnum;
6+
import com.lordofthejars.nosqlunit.mongodb.MongoDbRule;
7+
import org.gluecoders.library.config.Database;
8+
import org.gluecoders.library.dao.config.FakeMongo;
9+
import org.gluecoders.library.models.Book;
10+
import org.junit.Rule;
11+
import org.junit.Test;
12+
import org.junit.runner.RunWith;
13+
import org.springframework.beans.factory.annotation.Autowired;
14+
import org.springframework.context.ApplicationContext;
15+
import org.springframework.context.annotation.Import;
16+
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
17+
import org.springframework.test.context.junit4.SpringRunner;
18+
19+
import java.time.Month;
20+
import java.util.List;
21+
22+
import static com.lordofthejars.nosqlunit.mongodb.MongoDbRule.MongoDbRuleBuilder.newMongoDbRule;
23+
import static org.junit.Assert.*;
24+
25+
/**
26+
* Created by Anand_Rajneesh on 6/14/2017.
27+
*/
28+
@RunWith(SpringRunner.class)
29+
@Import(value = {FakeMongo.class, Database.class})
30+
@EnableMongoRepositories(basePackageClasses = {BookDao.class})
31+
public class BookDaoTest {
32+
33+
@Autowired
34+
private ApplicationContext applicationContext;
35+
36+
@Autowired
37+
private BookDao bookDao;
38+
39+
@Rule
40+
public MongoDbRule embeddedMongoDbRule = newMongoDbRule().defaultSpringMongoDb("mockDB");
41+
42+
@Test
43+
@UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL)
44+
public void getAllBooks_NoBooks() {
45+
List<Book> books = bookDao.findAll();
46+
assertTrue("Returned book list should be empty", books.isEmpty());
47+
}
48+
49+
@Test
50+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
51+
public void getAllBooks_WithBooks() {
52+
List<Book> books = bookDao.findAll();
53+
assertFalse("Returned book list should not be empty", books.isEmpty());
54+
}
55+
56+
@Test
57+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
58+
public void findDistinctByIsbnCode_IsbnAvailable(){
59+
Book book = bookDao.findDistinctByIsbnCode(1234567890L);
60+
assertNotNull("Book should be returned for 1234567890isbn ", book);
61+
}
62+
63+
64+
@Test
65+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
66+
public void findDistinctByIsbnCode_IsbnNotAvailable(){
67+
Book book = bookDao.findDistinctByIsbnCode(1234567892L);
68+
assertNull("No book should be returned for 1234567892 isbn ", book);
69+
}
70+
71+
72+
@Test
73+
@UsingDataSet(loadStrategy = LoadStrategyEnum.DELETE_ALL)
74+
public void findDistinctByIsbnCode_NoDataAvailable(){
75+
Book book = bookDao.findDistinctByIsbnCode(1234567890L);
76+
assertNull("No Book should be returned since there is no data present ", book);
77+
}
78+
79+
@Test
80+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/empty.json")
81+
@ShouldMatchDataSet(location = "/books/book1.json")
82+
public void addBook(){
83+
Book book = Book.builder()
84+
.author("Joshua Bloch")
85+
.categories("Programming", "Java")
86+
.isbn(1234567890L)
87+
.publisher("noidea")
88+
.yearOfPublishing(2011, Month.AUGUST)
89+
.title("Effective Java")
90+
.build();
91+
bookDao.save(book);
92+
}
93+
94+
@Test
95+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
96+
public void deleteBook_WithId(){
97+
Book book = bookDao.findDistinctByIsbnCode(1234567890L);
98+
bookDao.delete(book);
99+
}
100+
101+
@Test(expected = IllegalArgumentException.class)
102+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
103+
public void deleteBook_WithoutId(){
104+
Book book = bookDao.findDistinctByIsbnCode(1234567890L);
105+
book.setId(null);
106+
bookDao.delete(book);
107+
}
108+
109+
@Test
110+
@UsingDataSet(loadStrategy = LoadStrategyEnum.CLEAN_INSERT, locations = "/books/books.json")
111+
public void deleteBook_IdNotPresent(){
112+
Book book = bookDao.findDistinctByIsbnCode(1234567890L);
113+
book.setId("12323543453412");
114+
bookDao.delete(book);
115+
}
116+
117+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package org.gluecoders.library.dao.config;
2+
3+
import com.github.fakemongo.Fongo;
4+
import com.mongodb.MongoClient;
5+
import org.springframework.context.annotation.Bean;
6+
import org.springframework.context.annotation.Configuration;
7+
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
8+
9+
/**
10+
* Created by Anand_Rajneesh on 6/14/2017.
11+
*/
12+
@Configuration
13+
public class FakeMongo extends AbstractMongoConfiguration{
14+
15+
@Override
16+
protected String getDatabaseName() {
17+
return "mockDB";
18+
}
19+
20+
@Bean
21+
public MongoClient mongo() {
22+
Fongo fongo = new Fongo("mockDB");
23+
return fongo.getMongo();
24+
}
25+
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package org.gluecoders.library.models;
2+
3+
import org.junit.Test;
4+
import org.junit.runner.RunWith;
5+
import org.junit.runners.BlockJUnit4ClassRunner;
6+
7+
import java.time.Month;
8+
import java.time.YearMonth;
9+
10+
import static org.junit.Assert.*;
11+
/**
12+
* Created by Anand_Rajneesh on 6/14/2017.
13+
*/
14+
@RunWith(BlockJUnit4ClassRunner.class)
15+
public class BookTest {
16+
17+
@Test
18+
public void testBuilder(){
19+
Book book = Book.builder()
20+
.author("Joshua Bloch")
21+
.categories("Programming", "Java")
22+
.isbn(1234567890L)
23+
.publisher("noidea")
24+
.yearOfPublishing(2011, Month.AUGUST)
25+
.title("Effective Java")
26+
.build();
27+
28+
assertEquals("Joshua Bloch", book.getAuthor());
29+
assertEquals(1234567890L, book.getIsbnCode());
30+
assertEquals("noidea", book.getPublisher());
31+
assertEquals("Effective Java", book.getTitle());
32+
assertEquals(YearMonth.of(2011, Month.AUGUST), book.getPublishedYear());
33+
assertTrue(book.getCategories().contains("Programming"));
34+
assertTrue(book.getCategories().contains("Java"));
35+
}
36+
}

src/test/resources/books/book1.json

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"books": [
3+
{
4+
"title": "Effective Java",
5+
"author": "Joshua Bloch",
6+
"publishedYear": {
7+
"year": 2011,
8+
"month": 8
9+
},
10+
"categories": [
11+
"Programming",
12+
"Java"
13+
],
14+
"publisher": "noidea",
15+
"isbnCode": 1234567890
16+
}
17+
]
18+
}

src/test/resources/books/books.json

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
{
2+
"books":
3+
[
4+
{
5+
"title": "Effective Java",
6+
"author": "Joshua Bloch",
7+
"publishedYear": {
8+
"year": 2011,
9+
"month": 8
10+
},
11+
"categories":
12+
[
13+
"Programming",
14+
"Java"
15+
],
16+
"publisher": "noidea",
17+
"isbnCode": 1234567890
18+
},
19+
{
20+
"title": "Effective Java 2nd Edition",
21+
"author": "Joshua Bloch",
22+
"publishedYear": {
23+
"year": 2013,
24+
"month": 8
25+
},
26+
"categories":
27+
[
28+
"Programming",
29+
"Java"
30+
],
31+
"publisher": "noidea",
32+
"isbnCode": 1234567891
33+
}
34+
]
35+
}

src/test/resources/books/empty.json

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"books":
3+
[
4+
]
5+
}

0 commit comments

Comments
 (0)