diff --git a/pom.xml b/pom.xml
index 541b54d..06adbe6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,4 +12,26 @@
1.8
+
+
+ org.springframework
+ spring-context
+ 5.2.1.RELEASE
+
+
+
+ org.springframework
+ spring-test
+ 5.2.1.RELEASE
+ test
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+
+
diff --git a/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java b/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java
index ea1a0a1..e89aa6f 100644
--- a/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java
+++ b/src/main/java/com/epam/edu/spring/core/template/SpringCoreTemplate.java
@@ -1,8 +1,17 @@
package com.epam.edu.spring.core.template;
+import com.epam.edu.spring.core.template.configuration.MainConfiguration;
+import com.epam.edu.spring.core.template.repository.ItemRepository;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
public class SpringCoreTemplate {
- public static void main(String[] args) {
+ public static void main(String[] args) throws Exception {
+
+ AnnotationConfigApplicationContext context
+ = new AnnotationConfigApplicationContext(MainConfiguration.class);
+
+ System.out.println(context);
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java
index 444cc01..96b9765 100644
--- a/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java
+++ b/src/main/java/com/epam/edu/spring/core/template/configuration/InitializerConfiguration.java
@@ -1,4 +1,23 @@
package com.epam.edu.spring.core.template.configuration;
+import com.epam.edu.spring.core.template.entity.Color;
+import com.epam.edu.spring.core.template.entity.ColorFactory;
+import org.springframework.context.annotation.*;
+
+@Lazy
+@Configuration
public class InitializerConfiguration {
+
+ @Bean
+ @Scope("prototype")
+ public ColorFactory colorFactory() {
+ return new ColorFactory();
+ }
+
+ @Bean
+ @Scope("prototype")
+ public Color getColor() throws Exception {
+ return colorFactory().getObject();
+ }
+
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java
index f1b7446..fea20e1 100644
--- a/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java
+++ b/src/main/java/com/epam/edu/spring/core/template/configuration/MainConfiguration.java
@@ -1,4 +1,40 @@
package com.epam.edu.spring.core.template.configuration;
+import com.epam.edu.spring.core.template.entity.Color;
+import com.epam.edu.spring.core.template.repository.ItemRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.*;
+
+
+@Configuration
+@PropertySource("classpath:application.properties")
+@ComponentScan(basePackages = "com.epam.edu.spring.core.template")
+@Import({RepositoryConfiguration.class, InitializerConfiguration.class})
public class MainConfiguration {
+
+ @Value("${item.repository.implementation}")
+ String implementation;
+
+ @Autowired
+ private RepositoryConfiguration repositoryConfiguration;
+
+ @Autowired
+ private InitializerConfiguration initializerConfiguration;
+
+ @Bean
+ public ItemRepository repository() {
+ if (implementation.equals("array")) {
+ return repositoryConfiguration.arrayListItemRepository();
+ } else if (implementation.equals("linked")) {
+ return repositoryConfiguration.linkedListItemRepository();
+ } else {
+ return repositoryConfiguration.arrayListItemRepository();
+ }
+ }
+
+ @Bean
+ public Color getColor() throws Exception {
+ return initializerConfiguration.getColor();
+ }
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java b/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java
index 40fb52c..4aac4bf 100644
--- a/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java
+++ b/src/main/java/com/epam/edu/spring/core/template/configuration/RepositoryConfiguration.java
@@ -1,4 +1,29 @@
package com.epam.edu.spring.core.template.configuration;
+import com.epam.edu.spring.core.template.repository.ArrayListItemRepository;
+import com.epam.edu.spring.core.template.repository.ItemRepository;
+import com.epam.edu.spring.core.template.repository.LinkedListItemRepository;
+import org.springframework.context.annotation.*;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+
+@Configuration
+@ComponentScan(basePackages = "com.epam.edu.spring.core.template.repository")
public class RepositoryConfiguration {
+
+ @Bean
+ @Scope("singleton")
+ public ItemRepository arrayListItemRepository() {
+
+ return new ArrayListItemRepository(new ArrayList<>());
+ }
+
+ @Bean
+ @Scope("singleton")
+ public ItemRepository linkedListItemRepository() {
+ return new LinkedListItemRepository(new LinkedList<>());
+ }
+
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/entity/Color.java b/src/main/java/com/epam/edu/spring/core/template/entity/Color.java
index f5fe91d..f8356e2 100644
--- a/src/main/java/com/epam/edu/spring/core/template/entity/Color.java
+++ b/src/main/java/com/epam/edu/spring/core/template/entity/Color.java
@@ -1,5 +1,10 @@
package com.epam.edu.spring.core.template.entity;
public enum Color {
-
+ RED,
+ BLUE,
+ GREEN,
+ BROWN,
+ YELLOW,
+ PINK
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/entity/ColorFactory.java b/src/main/java/com/epam/edu/spring/core/template/entity/ColorFactory.java
new file mode 100644
index 0000000..a33a7b3
--- /dev/null
+++ b/src/main/java/com/epam/edu/spring/core/template/entity/ColorFactory.java
@@ -0,0 +1,48 @@
+package com.epam.edu.spring.core.template.entity;
+
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.Random;
+
+
+@Component
+public class ColorFactory implements FactoryBean {
+
+ private int factoryId;
+ private int colorId;
+
+ @Override
+ public Color getObject() throws Exception {
+ Random random = new Random();
+ int randomNumber = random.ints(0, Color.values().length)
+ .limit(1)
+ .findFirst()
+ .getAsInt();
+
+ Color[] colors = Color.values();
+ return colors[randomNumber];
+ }
+
+ @Override
+ public Class> getObjectType() {
+ return Color.class;
+ }
+
+ public int getFactoryId() {
+ return factoryId;
+ }
+
+ public void setFactoryId(int factoryId) {
+ this.factoryId = factoryId;
+ }
+
+ public int getColorId() {
+ return colorId;
+ }
+
+ public void setColorId(int colorId) {
+ this.colorId = colorId;
+ }
+}
diff --git a/src/main/java/com/epam/edu/spring/core/template/entity/Item.java b/src/main/java/com/epam/edu/spring/core/template/entity/Item.java
index d07b653..4e02487 100644
--- a/src/main/java/com/epam/edu/spring/core/template/entity/Item.java
+++ b/src/main/java/com/epam/edu/spring/core/template/entity/Item.java
@@ -1,5 +1,7 @@
package com.epam.edu.spring.core.template.entity;
+import java.util.Objects;
+
public class Item {
private long id;
@@ -45,4 +47,20 @@ public Color getColor() {
public void setColor(Color color) {
this.color = color;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ Item item = (Item) o;
+ return id == item.id &&
+ Double.compare(item.price, price) == 0 &&
+ Objects.equals(name, item.name) &&
+ color == item.color;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(id, name, price, color);
+ }
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java
index edcb085..9aa2f95 100644
--- a/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java
+++ b/src/main/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepository.java
@@ -2,27 +2,57 @@
import com.epam.edu.spring.core.template.entity.Item;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+
+
/**
* Репозиторий, основанный на классе ArrayList.
* initialSequence должен браться из application.properties
*/
+@Component
public class ArrayListItemRepository extends AbstractRepository- implements ItemRepository {
+ private final ArrayList
- listItem;
+
+ @Autowired
+ public ArrayListItemRepository(ArrayList
- listItem) {
+ this.listItem = listItem;
+ }
+
@Override
public Item getById(long id) {
+ for (Item item : listItem) {
+ if (item.getId() == id) {
+ return item;
+ }
+ }
return null;
}
@Override
public boolean createItem(Item item) {
- return false;
+ for (Item itemInList : listItem) {
+ if (itemInList.equals(item)) {
+ return false;
+ }
+ }
+ listItem.add(item);
+ return true;
}
void setInitialSequence(int val) {
- //TODO
+ this.initialSequence = val;
+ }
+
+ long getInitialSequence() {
+ return this.initialSequence;
}
void setHolder() {
- //TODO
+ this.holder = new ArrayList<>();
}
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java b/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java
index aa000f8..38c3d48 100644
--- a/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java
+++ b/src/main/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepository.java
@@ -1,28 +1,56 @@
package com.epam.edu.spring.core.template.repository;
import com.epam.edu.spring.core.template.entity.Item;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.LinkedList;
+import java.util.ListIterator;
+import java.util.Random;
/**
* Репозиторий, основанный на классе LinkedList.
* initialSequence должен случайно генерироваться из диапазона от 1 до 100
*/
+@Component
public class LinkedListItemRepository extends AbstractRepository
- implements ItemRepository {
+ private final LinkedList
- listItem;
+
+ public LinkedListItemRepository(LinkedList
- listItem) {
+ this.listItem = listItem;
+ }
+
@Override
public Item getById(long id) {
+ for (Item item : listItem) {
+ if (item.getId() == id) {
+ return item;
+ }
+ }
return null;
}
@Override
public boolean createItem(Item item) {
- return false;
+ for (Item itemInList : listItem) {
+ if (itemInList.equals(item)) {
+ return false;
+ }
+ }
+ listItem.add(item);
+ return true;
}
void setInitialSequence(int val) {
- //TODO
+ this.initialSequence = new Random().nextInt(1) + 100;
+ }
+
+ long getInitialSequence() {
+ return this.initialSequence;
}
void setHolder() {
- //TODO
+ this.holder = new LinkedList<>();
}
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java b/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java
index cb83f39..da06296 100644
--- a/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java
+++ b/src/main/java/com/epam/edu/spring/core/template/service/SimpleItemService.java
@@ -2,19 +2,28 @@
import com.epam.edu.spring.core.template.entity.Item;
import com.epam.edu.spring.core.template.validator.ItemValidator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
public class SimpleItemService implements ItemService {
- private ItemService itemService;
- private ItemValidator itemValidator;
+ private final ItemService itemService;
+
+ private final ItemValidator itemValidator;
+
+ @Autowired
+ public SimpleItemService(ItemService itemService, ItemValidator itemValidator) {
+ this.itemService = itemService;
+ this.itemValidator = itemValidator;
+ }
@Override
public Item getById(long id) {
- return null;
+ return itemService.getById(id);
}
@Override
public boolean createItem(Item item) {
- return false;
+ return itemValidator.isItemValid(item);
}
}
diff --git a/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java b/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java
index 003600b..a2bab59 100644
--- a/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java
+++ b/src/main/java/com/epam/edu/spring/core/template/validator/SimpleItemValidator.java
@@ -2,6 +2,8 @@
import com.epam.edu.spring.core.template.entity.Item;
+
+
public class SimpleItemValidator implements ItemValidator {
@Override
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index 69c2e92..f219f99 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -1,2 +1,2 @@
initial.sequence=42
-item.repository.implementation=
\ No newline at end of file
+item.repository.implementation=array
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/configuration/InitializerConfigurationTest.java b/src/test/java/com/epam/edu/spring/core/template/configuration/InitializerConfigurationTest.java
new file mode 100644
index 0000000..690c2e4
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/configuration/InitializerConfigurationTest.java
@@ -0,0 +1,28 @@
+package com.epam.edu.spring.core.template.configuration;
+
+import com.epam.edu.spring.core.template.entity.Color;
+import com.epam.edu.spring.core.template.entity.ColorFactory;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = InitializerConfiguration.class)
+public class InitializerConfigurationTest {
+
+ @Autowired
+ private InitializerConfiguration configuration;
+
+ @Test
+ public void testInitializerInstanceOf() throws Exception {
+ assertThat(configuration, instanceOf(InitializerConfiguration.class));
+ assertThat(configuration.colorFactory(), instanceOf(ColorFactory.class));
+ assertThat(configuration.getColor(), instanceOf(Color.class));
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyArrayTest.java b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyArrayTest.java
new file mode 100644
index 0000000..0053fbe
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyArrayTest.java
@@ -0,0 +1,37 @@
+package com.epam.edu.spring.core.template.configuration;
+
+import com.epam.edu.spring.core.template.entity.Color;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestPropertySource("classpath:applicationArray.properties")
+@ContextConfiguration(classes = MainConfiguration.class)
+public class MainConfigurationPropertyArrayTest {
+
+ @Autowired
+ private MainConfiguration mainConfiguration;
+
+ @Test
+ public void testPropertyMainConfiguration() {
+ Assert.assertEquals(mainConfiguration.implementation, "array");
+ }
+
+ @Test
+ public void testInstanceOfMainConfiguration() {
+ assertThat(mainConfiguration, instanceOf(MainConfiguration.class));
+ }
+
+ @Test
+ public void testInstanceOfGetColor() throws Exception {
+ assertThat(mainConfiguration.getColor(), instanceOf(Color.class));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyEmptyTest.java b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyEmptyTest.java
new file mode 100644
index 0000000..98d6679
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyEmptyTest.java
@@ -0,0 +1,37 @@
+package com.epam.edu.spring.core.template.configuration;
+
+import com.epam.edu.spring.core.template.entity.Color;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestPropertySource("classpath:applicationEmpty.properties")
+@ContextConfiguration(classes = MainConfiguration.class)
+public class MainConfigurationPropertyEmptyTest {
+
+ @Autowired
+ private MainConfiguration mainConfiguration;
+
+ @Test
+ public void testPropertyMainConfiguration() {
+ Assert.assertEquals(mainConfiguration.implementation, "");
+ }
+
+ @Test
+ public void testInstanceOfMainConfiguration() {
+ assertThat(mainConfiguration, instanceOf(MainConfiguration.class));
+ }
+
+ @Test
+ public void testInstanceOfGetColor() throws Exception {
+ assertThat(mainConfiguration.getColor(), instanceOf(Color.class));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyLinkedTest.java b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyLinkedTest.java
new file mode 100644
index 0000000..08974c4
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/configuration/MainConfigurationPropertyLinkedTest.java
@@ -0,0 +1,37 @@
+package com.epam.edu.spring.core.template.configuration;
+
+import com.epam.edu.spring.core.template.entity.Color;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.TestPropertySource;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@TestPropertySource("classpath:applicationLinked.properties")
+@ContextConfiguration(classes = MainConfiguration.class)
+public class MainConfigurationPropertyLinkedTest {
+
+ @Autowired
+ private MainConfiguration mainConfiguration;
+
+ @Test
+ public void testPropertyMainConfiguration() {
+ Assert.assertEquals(mainConfiguration.implementation, "linked");
+ }
+
+ @Test
+ public void testInstanceOfMainConfiguration() {
+ assertThat(mainConfiguration, instanceOf(MainConfiguration.class));
+ }
+
+ @Test
+ public void testInstanceOfGetColor() throws Exception {
+ assertThat(mainConfiguration.getColor(), instanceOf(Color.class));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/configuration/RepositoryConfigurationTest.java b/src/test/java/com/epam/edu/spring/core/template/configuration/RepositoryConfigurationTest.java
new file mode 100644
index 0000000..056148b
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/configuration/RepositoryConfigurationTest.java
@@ -0,0 +1,30 @@
+package com.epam.edu.spring.core.template.configuration;
+
+import com.epam.edu.spring.core.template.repository.ArrayListItemRepository;
+import com.epam.edu.spring.core.template.repository.LinkedListItemRepository;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = RepositoryConfiguration.class)
+public class RepositoryConfigurationTest {
+
+ @Autowired
+ private RepositoryConfiguration repositoryConfiguration;
+
+ @Test
+ public void testInstanceOfArraylistRepository() {
+ assertThat(repositoryConfiguration.arrayListItemRepository(), instanceOf(ArrayListItemRepository.class));
+ }
+
+ @Test
+ public void testInstanceOfLinkedListRepository() {
+ assertThat(repositoryConfiguration.linkedListItemRepository(), instanceOf(LinkedListItemRepository.class));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepositoryTest.java b/src/test/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepositoryTest.java
new file mode 100644
index 0000000..218130b
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/repository/ArrayListItemRepositoryTest.java
@@ -0,0 +1,60 @@
+package com.epam.edu.spring.core.template.repository;
+
+
+import com.epam.edu.spring.core.template.entity.ColorFactory;
+import com.epam.edu.spring.core.template.entity.Item;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = ArrayListItemRepository.class)
+public class ArrayListItemRepositoryTest {
+
+ @Autowired
+ private ArrayListItemRepository itemRepository;
+
+ private static Item apple;
+ private static Item orange;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ apple = new Item(1, "apple", 1000, new ColorFactory().getObject());
+ orange = new Item(2, "orange", 2000, new ColorFactory().getObject());
+ }
+
+
+ public ArrayListItemRepositoryTest() throws Exception {
+ }
+
+ @Test
+ public void testCreateItemArrayList() throws Exception {
+
+ boolean createAppleBoolean = itemRepository.createItem(apple);
+ boolean createOrangeBoolean = itemRepository.createItem(orange);
+ boolean repeatCreateAppleBoolean= itemRepository.createItem(apple);
+
+ assertThat(createAppleBoolean, equalTo(true));
+ assertThat(createOrangeBoolean, equalTo(true));
+ assertThat(repeatCreateAppleBoolean, equalTo(false));
+ }
+
+ @Test
+ public void testGetByIdArrayList() throws Exception {
+
+ Item findApple = itemRepository.getById(1);
+ Item findOrange = itemRepository.getById(2);
+ Item notFind = itemRepository.getById(3);
+
+ assertThat(apple, equalTo(findApple));
+ assertThat(orange, equalTo(findOrange));
+ assertThat(null, equalTo(notFind));
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepositoryTest.java b/src/test/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepositoryTest.java
new file mode 100644
index 0000000..0647a99
--- /dev/null
+++ b/src/test/java/com/epam/edu/spring/core/template/repository/LinkedListItemRepositoryTest.java
@@ -0,0 +1,63 @@
+package com.epam.edu.spring.core.template.repository;
+
+import com.epam.edu.spring.core.template.entity.ColorFactory;
+import com.epam.edu.spring.core.template.entity.Item;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsEqual.equalTo;
+
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@ContextConfiguration(classes = LinkedListItemRepository.class)
+public class LinkedListItemRepositoryTest {
+
+ @Autowired
+ private LinkedListItemRepository itemRepository;
+
+ private static Item apple;
+ private static Item orange;
+
+ @Before
+ public void setUp() throws Exception {
+ apple = new Item(1, "apple", 1000, new ColorFactory().getObject());
+ orange = new Item(2, "orange", 2000, new ColorFactory().getObject());
+ }
+
+ public LinkedListItemRepositoryTest() throws Exception {
+ }
+
+ @Test
+ public void testCreateItemLinkedList() throws Exception {
+
+ boolean createAppleBoolean = itemRepository.createItem(apple);
+ boolean createOrangeBoolean = itemRepository.createItem(orange);
+ boolean repeatCreateAppleBoolean= itemRepository.createItem(apple);
+
+ assertThat(createAppleBoolean, equalTo(true));
+ assertThat(createOrangeBoolean, equalTo(true));
+ assertThat(repeatCreateAppleBoolean, equalTo(false));
+ }
+
+ @Test
+ public void testGetByIdLinkedList() throws Exception {
+
+ itemRepository.createItem(apple);
+ itemRepository.createItem(orange);
+ itemRepository.createItem(apple);
+
+ Item findApple = itemRepository.getById(1);
+ Item findOrange = itemRepository.getById(2);
+ Item notFind = itemRepository.getById(3);
+
+ assertThat(apple, equalTo(findApple));
+ assertThat(orange, equalTo(findOrange));
+ assertThat(null, equalTo(notFind));
+ }
+}
\ No newline at end of file
diff --git a/src/test/resources/applicationArray.properties b/src/test/resources/applicationArray.properties
new file mode 100644
index 0000000..f219f99
--- /dev/null
+++ b/src/test/resources/applicationArray.properties
@@ -0,0 +1,2 @@
+initial.sequence=42
+item.repository.implementation=array
\ No newline at end of file
diff --git a/src/test/resources/applicationEmpty.properties b/src/test/resources/applicationEmpty.properties
new file mode 100644
index 0000000..69c2e92
--- /dev/null
+++ b/src/test/resources/applicationEmpty.properties
@@ -0,0 +1,2 @@
+initial.sequence=42
+item.repository.implementation=
\ No newline at end of file
diff --git a/src/test/resources/applicationLinked.properties b/src/test/resources/applicationLinked.properties
new file mode 100644
index 0000000..864c68f
--- /dev/null
+++ b/src/test/resources/applicationLinked.properties
@@ -0,0 +1,2 @@
+initial.sequence=42
+item.repository.implementation=linked
\ No newline at end of file