package models;
import org.junit.Test;
import util.InMemoryDbTest;
import javax.persistence.PersistenceException;
import java.util.List;
import static org.junit.Assert.*;
public class PositionModelTest extends InMemoryDbTest {
@Test
public void testFindAllPositions() {
List<PositionModel> positionModels = PositionModel.find.all();
assertNotNull("PositionModels null", positionModels);
assertEquals("PositionModels count", 14, positionModels.size());
}
@Test
public void testFindById() {
PositionModel model = PositionModel.find.byId(1L);
assertNotNull("PositionModel null", model);
assertEquals("PositionModel name ", "Ekofisk", model.name);
assertTrue("PositionModel latitude", Math.abs(model.latitude - 55.898853) < 0.00001);
assertTrue("PositionModel longitude", Math.abs(model.longitude - 3.100606) < 0.00001);
assertNotNull("PositionModel tags null", model.tags);
assertEquals("PositionModel tags", 3 ,model.tags.size());
}
@Test
public void testAddNewTag(){
PositionModel model = PositionModel.findByName("Gullfaks");
PositionTagModel tag = new PositionTagModel("Test");
List<PositionTagModel> allTags = PositionTagModel.find.all();
assertEquals("# all tags", 6, allTags.size());
model.tags.add(tag);
model.save();
PositionModel model2 = PositionModel.find.byId(2L);
assertEquals("# tags", 4, model2.tags.size());
allTags = PositionTagModel.find.all();
assertEquals("# tags",7,allTags.size());
}
@Test
public void testAddExistingTag(){
PositionModel model = PositionModel.findByName("Gullfaks");
PositionTagModel tag = PositionTagModel.findByName("Atlanterhavet");
model.tags.add(tag);
model.save();
PositionModel model2 = PositionModel.find.byId(2L);
assertEquals("# tags",4,model2.tags.size());
}
@Test(expected = PersistenceException.class)
public void testSaveTwoWithSameName() {
PositionModel model = PositionModel.find.byId(1L);
PositionModel model2 = new PositionModel();
model2.name = model.name;
model2.save();
}
@Test
public void testAddPositionTag(){
PositionModel position = PositionModel.find.byId(1L);
int numTags = position.tags.size();
position.tags.add(new PositionTagModel("Dummy"));
position.save();
PositionModel p2 = PositionModel.find.byId(1L);
assertEquals("Number of tags increased by 1", numTags + 1, p2.tags.size());
}
@Test
public void testChangePositionTag(){
PositionModel position = PositionModel.find.byId(1L);
int numTags = position.tags.size();
PositionTagModel[] tags = position.tags.toArray(new PositionTagModel[numTags]);
position.tags.remove(tags[0]); // remove first tag
position.tags.add(new PositionTagModel("ZZZ"));
position.save();
PositionModel p2 = PositionModel.find.byId(1L);
assertEquals("Number of tags unchanged", numTags , p2.tags.size());
PositionTagModel[] tags2 = p2.tags.toArray(new PositionTagModel[numTags]);
assertEquals("TagName", "ZZZ",tags2[numTags-1].name);
}
}