--- /dev/null
+package models;
+
+import java.util.*;
+import javax.persistence.*;
+import javax.xml.bind.annotation.adapters.HexBinaryAdapter;
+
+import play.db.jpa.*;
+
+@Entity
+public class User extends Model {
+
+ public String email;
+ public String password;
+ public String fullname;
+ public String hash;
+ public boolean isAdmin;
+ @ManyToMany(mappedBy="participants")
+ public List<Party> parties;
+ @OneToMany(mappedBy="organiser")
+ public List<Party> organisedParties;
+
+ public User(String email, String password, String fullname) {
+ this.parties = new ArrayList<Party>();
+ this.organisedParties = new ArrayList<Party>();
+ this.email = email;
+ this.password = password;
+ this.fullname = fullname;
+ generateHash();
+ }
+
+ private void generateHash() {
+ Random random = new Random();
+ byte[] bytes = new byte[16];
+ random.nextBytes(bytes);
+ HexBinaryAdapter adapter = new HexBinaryAdapter();
+ this.hash = adapter.marshal(bytes);
+ }
+
+ public static User connect(String email, String password) {
+ return find("byEmailAndPassword", email, password).first();
+ }
+
+}
\r
public class BasicTest extends UnitTest {\r
\r
- @Test\r
- public void aVeryImportantThingToTest() {\r
- assertEquals(2, 1 + 1);\r
- }\r
+@Before\r
+public void setup() {\r
+ Fixtures.deleteDatabase();\r
+}\r
+ \r
+@Test\r
+public void createAndRetrieveUser() {\r
+ // Create a new user and save it\r
+ new User("bob@gmail.com", "secret", "Bob").save();\r
+ \r
+ // Retrieve the user with e-mail address bob@gmail.com\r
+ User bob = User.find("byEmail", "bob@gmail.com").first();\r
+ \r
+ // Test \r
+ assertNotNull(bob);\r
+ assertEquals("Bob", bob.fullname);\r
+}\r
+\r
+@Test\r
+public void tryConnectAsUser() {\r
+ // Create a new user and save it\r
+ new User("bob@gmail.com", "secret", "Bob").save();\r
+ \r
+ // Test \r
+ assertNotNull(User.connect("bob@gmail.com", "secret"));\r
+ assertNull(User.connect("bob@gmail.com", "badpassword"));\r
+ assertNull(User.connect("tom@gmail.com", "secret"));\r
+}\r
+\r
+@Test\r
+public void createParty() {\r
+ // Create a new user and save it\r
+ User bob = new User("bob@gmail.com", "secret", "Bob").save();\r
+ \r
+ // Create a new party\r
+ Date someDate = new GregorianCalendar(2012, 3, 22).getTime();\r
+ new Party(bob, "My first party", someDate).save();\r
+ \r
+ // Test that the post has been created\r
+ assertEquals(1, Party.count());\r
+ \r
+ // Retrieve all posts created by Bob\r
+ List<Party> bobParties = Party.find("byOrganiser", bob).fetch();\r
+ \r
+ // Tests\r
+ assertEquals(1, bobParties.size());\r
+ Party firstParty = bobParties.get(0);\r
+ assertNotNull(firstParty);\r
+ assertEquals(bob, firstParty.organiser);\r
+ assertEquals("My first party", firstParty.description);\r
+ assertEquals(someDate, firstParty.date);\r
+}\r
+\r
+@Test\r
+public void createParticipants() {\r
+ // Create a new user and save it\r
+ User bob = new User("bob@gmail.com", "secret", "Bob").save();\r
+ \r
+ // Create a new party\r
+ Date someDate = new GregorianCalendar(2012, 3, 22).getTime();\r
+ new Party(bob, "My first party", someDate).save();\r
+\r
+ // Create participants\r
+ User alice = new User("alice@xs4all.nl", "s3cr3t", "Alice").save();\r
+ User charlie = new User("charlie@kpnplanet.nl", "s3cr3t", "Charlie").save();\r
+ User dirk = new User("dirk@online.de", "geheim", "Dirk").save();\r
\r
+ // Test that the party has been created\r
+ assertEquals(1, Party.count());\r
+ \r
+ // Retrieve all parties created by Bob\r
+ List<Party> bobParties = Party.find("byOrganiser", bob).fetch();\r
+ \r
+ // Tests\r
+ assertEquals(1, bobParties.size());\r
+ Party firstParty = bobParties.get(0);\r
+ assertNotNull(firstParty);\r
+\r
+ // Add participant\r
+ firstParty.addParticipant(alice);\r
+ assertEquals(1, firstParty.participants.size());\r
+\r
+ // Add more participants\r
+ firstParty.addParticipant(charlie);\r
+ firstParty.addParticipant(dirk);\r
+ assertEquals(3, firstParty.participants.size());\r
+\r
+\r
+}\r
+ \r
+@Test\r
+public void fullTest() {\r
+ Fixtures.loadModels("data.yml");\r
+ \r
+ // Count things\r
+ assertEquals(5, User.count());\r
+ assertEquals(2, Party.count());\r
+ \r
+ // Try to connect as users\r
+ assertNotNull(User.connect("bob@gmail.com", "secret"));\r
+ assertNotNull(User.connect("jeff@gmail.com", "secret"));\r
+ assertNotNull(User.connect("dirk@gmail.com", "geheim"));\r
+ assertNull(User.connect("jeff@gmail.com", "badpassword"));\r
+ assertNull(User.connect("tom@gmail.com", "secret"));\r
+ \r
+ // Find all of Bob's parties\r
+ List<Party> bobParties = Party.find("organiser.email", "bob@gmail.com").fetch();\r
+ assertEquals(2, bobParties.size());\r
+ \r
+ // Find the first party\r
+ Party firstParty = Party.find("order by date asc").first();\r
+ assertNotNull(firstParty);\r
+ assertEquals("Sinterklaas!", firstParty.description);\r
+ \r
+ // Check that this party has three participants\r
+ assertEquals(3, firstParty.participants.size());\r
+ assertEquals("Bob", firstParty.participants.get(0).fullname);\r
+ assertEquals("Alice", firstParty.participants.get(1).fullname);\r
+ assertEquals("Charlie", firstParty.participants.get(2).fullname);\r
+ \r
+ // Add a participant\r
+ User jeff = User.find("email", "jeff@gmail.com").first();\r
+ assertNotNull(jeff);\r
+\r
+ firstParty.addParticipant(jeff);\r
+ assertEquals(4, firstParty.participants.size());\r
+}\r
}\r