]> www.vanbest.org Git - lootjes-play/commitdiff
Added Party and User models and some tests
authorJan-Pascal van Best <janpascal@vanbest.org>
Mon, 13 Feb 2012 16:48:55 +0000 (17:48 +0100)
committerJan-Pascal van Best <janpascal@vanbest.org>
Mon, 13 Feb 2012 16:48:55 +0000 (17:48 +0100)
app/models/Party.java [new file with mode: 0644]
app/models/User.java [new file with mode: 0644]
test/BasicTest.java
test/data.yml

diff --git a/app/models/Party.java b/app/models/Party.java
new file mode 100644 (file)
index 0000000..84a5c80
--- /dev/null
@@ -0,0 +1,33 @@
+package models;
+import java.util.*;
+import javax.persistence.*;
+import play.db.jpa.*;
+@Entity
+public class Party extends Model {
+    public String description;
+    public Date date;
+    @ManyToOne(cascade=CascadeType.ALL)
+    public User organiser;
+    @ManyToMany
+    public List<User> participants;
+    
+    public Party(User organiser, String description, Date date) {
+        this.participants = new ArrayList<User>();
+        this.organiser = organiser;
+        organiser.organisedParties.add(this);
+        this.description = description;
+        this.date = date;
+    }
+
+    public Party addParticipant(User participant) {
+        this.participants.add(participant);
+        participant.parties.add(this);
+        participant.save();
+        this.save();
+        return this;
+    }
+}
diff --git a/app/models/User.java b/app/models/User.java
new file mode 100644 (file)
index 0000000..5147f98
--- /dev/null
@@ -0,0 +1,43 @@
+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();
+    }
+
+}
index 892274ce6f696c7f0b883c09e5cd4ffaf8eb3694..b392bf3065db128fc26829b477393a034da3ee4e 100644 (file)
@@ -5,9 +5,131 @@ import models.*;
 \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
index 77b04bb14b22de3ecb8ec7852556fa127b204fab..0f7b63b6d4c32dff96bf1051627caf863bd89ea3 100644 (file)
@@ -1,7 +1,38 @@
-# you describe your data using the YAML notation here
-# and then load them using Fixtures.load("data.yml")
+# Test data
 
-# User(bob):
-#   email: bob@gmail.com
-#   password: secret
-#   fullname: Bob
\ No newline at end of file
+User(bob):
+    email:          bob@gmail.com
+    password:       secret
+    fullname:       Bob
+    isAdmin:        true
+    
+User(jeff):
+    email:          jeff@gmail.com
+    password:       secret
+    fullname:       Jeff    
+    
+User(alice):
+    email:          alice@gmail.com
+    password:       secret
+    fullname:       Alice   
+    
+User(charlie):
+    email:          charlie@gmail.com
+    password:       secret
+    fullname:       Charlie    
+    
+User(dirk):
+    email:          dirk@gmail.com
+    password:       geheim
+    fullname:       Dirk    
+   
+Party(firstParty):
+    description:    Sinterklaas!
+    date:           2012-12-05
+    organiser:      bob
+    participants:   [bob,alice,charlie]
+
+Party(secondParty):
+    description:    Noggus Sinterklaas!
+    date:           2012-12-06
+    organiser:      bob