From: Jan-Pascal van Best Date: Mon, 13 Feb 2012 16:48:55 +0000 (+0100) Subject: Added Party and User models and some tests X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=2cd7050333634a9eea274e30e2f50d3a6950829f;p=lootjes-play Added Party and User models and some tests --- diff --git a/app/models/Party.java b/app/models/Party.java new file mode 100644 index 0000000..84a5c80 --- /dev/null +++ b/app/models/Party.java @@ -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 participants; + + public Party(User organiser, String description, Date date) { + this.participants = new ArrayList(); + 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 index 0000000..5147f98 --- /dev/null +++ b/app/models/User.java @@ -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 parties; + @OneToMany(mappedBy="organiser") + public List organisedParties; + + public User(String email, String password, String fullname) { + this.parties = new ArrayList(); + this.organisedParties = new ArrayList(); + 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(); + } + +} diff --git a/test/BasicTest.java b/test/BasicTest.java index 892274c..b392bf3 100644 --- a/test/BasicTest.java +++ b/test/BasicTest.java @@ -5,9 +5,131 @@ import models.*; public class BasicTest extends UnitTest { - @Test - public void aVeryImportantThingToTest() { - assertEquals(2, 1 + 1); - } +@Before +public void setup() { + Fixtures.deleteDatabase(); +} + +@Test +public void createAndRetrieveUser() { + // Create a new user and save it + new User("bob@gmail.com", "secret", "Bob").save(); + + // Retrieve the user with e-mail address bob@gmail.com + User bob = User.find("byEmail", "bob@gmail.com").first(); + + // Test + assertNotNull(bob); + assertEquals("Bob", bob.fullname); +} + +@Test +public void tryConnectAsUser() { + // Create a new user and save it + new User("bob@gmail.com", "secret", "Bob").save(); + + // Test + assertNotNull(User.connect("bob@gmail.com", "secret")); + assertNull(User.connect("bob@gmail.com", "badpassword")); + assertNull(User.connect("tom@gmail.com", "secret")); +} + +@Test +public void createParty() { + // Create a new user and save it + User bob = new User("bob@gmail.com", "secret", "Bob").save(); + + // Create a new party + Date someDate = new GregorianCalendar(2012, 3, 22).getTime(); + new Party(bob, "My first party", someDate).save(); + + // Test that the post has been created + assertEquals(1, Party.count()); + + // Retrieve all posts created by Bob + List bobParties = Party.find("byOrganiser", bob).fetch(); + + // Tests + assertEquals(1, bobParties.size()); + Party firstParty = bobParties.get(0); + assertNotNull(firstParty); + assertEquals(bob, firstParty.organiser); + assertEquals("My first party", firstParty.description); + assertEquals(someDate, firstParty.date); +} + +@Test +public void createParticipants() { + // Create a new user and save it + User bob = new User("bob@gmail.com", "secret", "Bob").save(); + + // Create a new party + Date someDate = new GregorianCalendar(2012, 3, 22).getTime(); + new Party(bob, "My first party", someDate).save(); + + // Create participants + User alice = new User("alice@xs4all.nl", "s3cr3t", "Alice").save(); + User charlie = new User("charlie@kpnplanet.nl", "s3cr3t", "Charlie").save(); + User dirk = new User("dirk@online.de", "geheim", "Dirk").save(); + // Test that the party has been created + assertEquals(1, Party.count()); + + // Retrieve all parties created by Bob + List bobParties = Party.find("byOrganiser", bob).fetch(); + + // Tests + assertEquals(1, bobParties.size()); + Party firstParty = bobParties.get(0); + assertNotNull(firstParty); + + // Add participant + firstParty.addParticipant(alice); + assertEquals(1, firstParty.participants.size()); + + // Add more participants + firstParty.addParticipant(charlie); + firstParty.addParticipant(dirk); + assertEquals(3, firstParty.participants.size()); + + +} + +@Test +public void fullTest() { + Fixtures.loadModels("data.yml"); + + // Count things + assertEquals(5, User.count()); + assertEquals(2, Party.count()); + + // Try to connect as users + assertNotNull(User.connect("bob@gmail.com", "secret")); + assertNotNull(User.connect("jeff@gmail.com", "secret")); + assertNotNull(User.connect("dirk@gmail.com", "geheim")); + assertNull(User.connect("jeff@gmail.com", "badpassword")); + assertNull(User.connect("tom@gmail.com", "secret")); + + // Find all of Bob's parties + List bobParties = Party.find("organiser.email", "bob@gmail.com").fetch(); + assertEquals(2, bobParties.size()); + + // Find the first party + Party firstParty = Party.find("order by date asc").first(); + assertNotNull(firstParty); + assertEquals("Sinterklaas!", firstParty.description); + + // Check that this party has three participants + assertEquals(3, firstParty.participants.size()); + assertEquals("Bob", firstParty.participants.get(0).fullname); + assertEquals("Alice", firstParty.participants.get(1).fullname); + assertEquals("Charlie", firstParty.participants.get(2).fullname); + + // Add a participant + User jeff = User.find("email", "jeff@gmail.com").first(); + assertNotNull(jeff); + + firstParty.addParticipant(jeff); + assertEquals(4, firstParty.participants.size()); +} } diff --git a/test/data.yml b/test/data.yml index 77b04bb..0f7b63b 100644 --- a/test/data.yml +++ b/test/data.yml @@ -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