Merge branch 'DBBranch'

This commit is contained in:
IvanaE 2018-11-28 13:13:13 -05:00
commit e50c681d54
3 changed files with 283 additions and 55 deletions

View file

@ -33,7 +33,8 @@ public class Booking {
} }
private Status status; private Status status;
int rating; //out of 5 private int rating; //out of 5
private String comment;
public Booking(int starth, int startmin, int endh, int endmin, int day, int month, int year, public Booking(int starth, int startmin, int endh, int endmin, int day, int month, int year,
ServiceProvider serviceprovider, HomeOwner homeowner, Service service){ ServiceProvider serviceprovider, HomeOwner homeowner, Service service){
@ -143,5 +144,11 @@ public class Booking {
this.rating = rating; this.rating = rating;
} }
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
} }

View file

@ -27,7 +27,7 @@ import com.uottawa.olympus.olympusservices.Booking.Status;
public class DBHelper extends SQLiteOpenHelper { public class DBHelper extends SQLiteOpenHelper {
//version of db used for update method //version of db used for update method
private static final int DB_VERSION = 5; private static final int DB_VERSION = 6;
//name of db in app data //name of db in app data
private static final String DB_NAME = "UsersDB.db"; private static final String DB_NAME = "UsersDB.db";
@ -100,6 +100,7 @@ public class DBHelper extends SQLiteOpenHelper {
private static final String COLUMN_BOOKINGEND = "endtime"; private static final String COLUMN_BOOKINGEND = "endtime";
private static final String COLUMN_BOOKINGSTATUS = "status"; private static final String COLUMN_BOOKINGSTATUS = "status";
private static final String COLUMN_RATING = "rating"; private static final String COLUMN_RATING = "rating";
private static final String COLUMN_COMMENT = "comment";
/** /**
* Creates an instance of DBHelper to allow activities to access and * Creates an instance of DBHelper to allow activities to access and
@ -191,7 +192,8 @@ public class DBHelper extends SQLiteOpenHelper {
+ COLUMN_BOOKINGSTART + " REAL, " + COLUMN_BOOKINGSTART + " REAL, "
+ COLUMN_BOOKINGEND + " REAL, " + COLUMN_BOOKINGEND + " REAL, "
+ COLUMN_BOOKINGSTATUS + " TEXT, " + COLUMN_BOOKINGSTATUS + " TEXT, "
+ COLUMN_RATING + " REAL DEFAULT 0 " + COLUMN_RATING + " REAL DEFAULT 0, "
+ COLUMN_COMMENT + " TEXT DEFAULT ''"
+ ")"; + ")";
db.execSQL(CREATE_BOOKING_TABLE); db.execSQL(CREATE_BOOKING_TABLE);
} }
@ -261,6 +263,9 @@ public class DBHelper extends SQLiteOpenHelper {
+ COLUMN_BOOKINGSTATUS + " TEXT, " + COLUMN_BOOKINGSTATUS + " TEXT, "
+ COLUMN_RATING + " REAL DEFAULT 0 " + COLUMN_RATING + " REAL DEFAULT 0 "
+ ")"); + ")");
case 5:
db.execSQL("ALTER TABLE " + TABLE_BOOKINGS + " ADD COLUMN " + COLUMN_COMMENT + " TEXT DEFAULT ''");
} }
} }
@ -331,6 +336,19 @@ public class DBHelper extends SQLiteOpenHelper {
values.put(COLUMN_DESCRIPTION, description); values.put(COLUMN_DESCRIPTION, description);
} }
ContentValues contentValues = new ContentValues();
int[] setToZero = new int[]{0,0,0,0};
addAvailabilityToContentValues(contentValues, COLUMN_MONSTART, COLUMN_MONEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_TUESTART, COLUMN_TUEEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_WEDSTART, COLUMN_WEDEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_THUSTART, COLUMN_THUEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_FRISTART, COLUMN_FRIEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_SATSTART, COLUMN_SATEND, setToZero);
addAvailabilityToContentValues(contentValues, COLUMN_SUNSTART, COLUMN_SUNEND, setToZero);
contentValues.put(COLUMN_AVAILABILITYNAME, serviceProvider.getUsername());
writeDB.insert(TABLE_AVAILABILITY, null, contentValues);
} }
writeDB.insert(TABLE_LOGIN, null, values); writeDB.insert(TABLE_LOGIN, null, values);
@ -1029,18 +1047,18 @@ public class DBHelper extends SQLiteOpenHelper {
/** /**
* *
* @param username * @param username
* @return list of booking objects related to specified user * @return list of booking objects related to specified user.
* Returns an empty list if no bookings found
*/ */
public List<Booking> findBookings(String username){ public List<Booking> findBookings(String username){
List<Booking> bookingList = new ArrayList<>();
ServiceProvider serviceProvider = null; ServiceProvider serviceProvider = null;
HomeOwner homeOwner = null; HomeOwner homeOwner = null;
Cursor cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_LOGIN + " WHERE " Cursor cursor = writeDB.rawQuery("SELECT " + COLUMN_USERTYPE + " FROM " + TABLE_LOGIN + " WHERE "
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?", + COLUMN_USERNAME + " = ?",
new String[] {username}); new String[] {username});
if (!cursor.moveToFirst() || cursor.getString(5).equals("Admin")) return bookingList; if (!cursor.moveToFirst() || cursor.getString(0).equals("Admin")) return new ArrayList<>();
if (cursor.getString(5).equals("ServiceProvider")) { if (cursor.getString(0).equals("ServiceProvider")) {
serviceProvider = (ServiceProvider)findUserByUsername(username); serviceProvider = (ServiceProvider)findUserByUsername(username);
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE " cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?", + COLUMN_BOOKINGSERVICEPROVIDER + " = ?",
@ -1052,36 +1070,40 @@ public class DBHelper extends SQLiteOpenHelper {
new String[]{username}); new String[]{username});
} }
if (cursor.moveToFirst()){ return getBookings(cursor, serviceProvider, homeOwner);
for (int i=0; i<cursor.getCount(); i++){
int startTime = cursor.getInt(6);
int endTime = cursor.getInt(7);
int starth = startTime / 60;
int startmin = startTime % 60;
int endh = endTime / 60;
int endmin = endTime % 60;
int day = cursor.getInt(5);
int month = cursor.getInt(4);
int year = cursor.getInt(3);
String stat = cursor.getString(8);
Status status = (stat.equals("Pending")? Status.PENDING :
stat.equals("Confirmed")? Status.CONFIRMED : Status.CANCELLED);
ServiceProvider serviceprovider = (serviceProvider == null?
(ServiceProvider)findUserByUsername(cursor.getString(0)):serviceProvider);
HomeOwner homeowner = (homeOwner == null?
(HomeOwner) findUserByUsername(cursor.getString(1)):homeOwner);
Service service = findService(cursor.getString(3));
Booking booking = new Booking(starth, startmin, endh, endmin, day, month, year,
serviceprovider, homeowner, service);
booking.setStatus(status);
bookingList.add(booking);
cursor.moveToNext();
}
}
return bookingList;
} }
/**
*
* @param username
* @return list of booking objects related to specified user.
* Returns an empty list if no bookings found
*/
public List<Booking> findNonCancelledBookings(String username) {
List<Booking> bookingList = new ArrayList<>();
ServiceProvider serviceProvider = null;
HomeOwner homeOwner = null;
Cursor cursor = writeDB.rawQuery("SELECT " + COLUMN_USERTYPE + " FROM " + TABLE_LOGIN + " WHERE "
+ COLUMN_USERNAME + " = ?",
new String[]{username});
if (!cursor.moveToFirst() || cursor.getString(0).equals("Admin")) return bookingList;
if (cursor.getString(0).equals("ServiceProvider")) {
serviceProvider = (ServiceProvider) findUserByUsername(username);
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
+ COLUMN_BOOKINGSTATUS + " != ?",
new String[]{username, Status.CANCELLED.toString()});
} else {
homeOwner = (HomeOwner) findUserByUsername(username);
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
+ COLUMN_BOOKINGSTATUS + " != ?",
new String[]{username, Status.CANCELLED.toString()});
}
return getBookings(cursor, serviceProvider, homeOwner);
}
/** /**
* Sets status of specified booking to cancelled. Returns false if booking * Sets status of specified booking to cancelled. Returns false if booking
@ -1105,6 +1127,17 @@ public class DBHelper extends SQLiteOpenHelper {
return modifyBookingStatus(booking, Status.CANCELLED); return modifyBookingStatus(booking, Status.CANCELLED);
} }
/**
* Add a rating for a specific booking, and updates the average rating for the service provider
* and service combination. The booking must have passed before a rating can be added.
* Note that the rating is final.
*
* @param booking Booking with rating and comment already included
* @return true if adding the rating was successful
*/
public boolean addRating(Booking booking){
return addRating(booking, booking.getRating(), booking.getComment());
}
/** /**
* Add a rating for a specific booking, and updates the average rating for the service provider * Add a rating for a specific booking, and updates the average rating for the service provider
@ -1113,9 +1146,24 @@ public class DBHelper extends SQLiteOpenHelper {
* *
* @param booking * @param booking
* @param rating * @param rating
*
* @return true if adding the rating was successful * @return true if adding the rating was successful
*/ */
public boolean addRating(Booking booking, double rating){ public boolean addRating(Booking booking, double rating){
return addRating(booking, rating, "");
}
/**
* Add a rating for a specific booking, and updates the average rating for the service provider
* and service combination. The booking must have passed before a rating can be added.
* Note that the rating is final.
*
* @param booking
* @param rating
* @param comment
* @return true if adding the rating was successful
*/
public boolean addRating(Booking booking, double rating, String comment){
if (booking == null) return false; if (booking == null) return false;
GregorianCalendar current = new GregorianCalendar(); GregorianCalendar current = new GregorianCalendar();
@ -1128,6 +1176,7 @@ public class DBHelper extends SQLiteOpenHelper {
ContentValues contentValues = new ContentValues(); ContentValues contentValues = new ContentValues();
contentValues.put(COLUMN_RATING, rating); contentValues.put(COLUMN_RATING, rating);
contentValues.put(COLUMN_COMMENT, comment);
boolean updated = writeDB.update(TABLE_BOOKINGS, contentValues, boolean updated = writeDB.update(TABLE_BOOKINGS, contentValues,
@ -1177,8 +1226,8 @@ public class DBHelper extends SQLiteOpenHelper {
* @param service * @param service
* @return average rating of specified service provider and service combination * @return average rating of specified service provider and service combination
*/ */
public double getRatings(ServiceProvider serviceProvider, Service service){ public double getAverageRating(ServiceProvider serviceProvider, Service service){
return getRatings(serviceProvider.getUsername(), service.getName()); return getAverageRating(serviceProvider.getUsername(), service.getName());
} }
/** /**
@ -1188,7 +1237,7 @@ public class DBHelper extends SQLiteOpenHelper {
* @param serviceName name of service * @param serviceName name of service
* @return average rating of specified service provider and service combination * @return average rating of specified service provider and service combination
*/ */
public double getRatings(String serviceProviderName, String serviceName){ public double getAverageRating(String serviceProviderName, String serviceName){
serviceName = serviceName.trim().toLowerCase(); serviceName = serviceName.trim().toLowerCase();
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_AVERAGERATING}, Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_AVERAGERATING},
COLUMN_SERVICEPROVIDERNAME + " = ? AND " COLUMN_SERVICEPROVIDERNAME + " = ? AND "
@ -1202,6 +1251,56 @@ public class DBHelper extends SQLiteOpenHelper {
return rating; return rating;
} }
/**
* Gets a list of Strings in form [Homeowner username, rating, comment] for a specific
* service provider and service combination. Only includes bookings that have been rated.
*
* @param serviceProvider
* @param service
* @return
*/
public List<String[]> getAllRatingsAndComments(ServiceProvider serviceProvider, Service service){
return getAllRatingsAndComments(serviceProvider.getUsername(), service.getName());
}
/**
* Gets a list of Strings in form [Homeowner username, rating, comment] for a specific
* service provider and service combination. Only includes bookings that have been rated.
*
* @param serviceProviderName
* @param serviceName
* @return
*/
public List<String[]> getAllRatingsAndComments(String serviceProviderName, String serviceName){
return getAll("SELECT " + COLUMN_BOOKINGHOMEOWNER +", "
+ COLUMN_RATING + ", " + COLUMN_COMMENT + " FROM " + TABLE_BOOKINGS
+ " WHERE " + COLUMN_BOOKINGSERVICEPROVIDER + " = " + serviceProviderName
+ " AND " + COLUMN_BOOKINGSERVICE + " = " + serviceName
+ " AND " + COLUMN_RATING + " > 0");
}
public String[] getSpecificRatingAndComment(String serviceProviderName, String serviceName,
int year, int month, int day, int starth, int startmin){
Cursor cursor = writeDB.query(TABLE_BOOKINGS,
new String[]{COLUMN_BOOKINGHOMEOWNER, COLUMN_RATING, COLUMN_COMMENT},
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
+ COLUMN_BOOKINGSERVICE + " = ? AND "
+ COLUMN_BOOKINGYEAR + " = ? AND "
+ COLUMN_BOOKINGMONTH + " = ? AND "
+ COLUMN_BOOKINGDATE + " = ? AND "
+ COLUMN_BOOKINGSTART + " = ? AND "
+ COLUMN_RATING + " > 0",
new String[]{serviceProviderName, serviceName, String.valueOf(year),
String.valueOf(month), String.valueOf(day), String.valueOf(starth*60+startmin)},
null, null, null, null);
if (cursor.moveToFirst()){
return new String[]{cursor.getString(0),
cursor.getString(1),cursor.getString(2)};
} else {
return null;
}
}
/** /**
* Returns the number of people who rated a service provider's service * Returns the number of people who rated a service provider's service
* *
@ -1308,14 +1407,15 @@ public class DBHelper extends SQLiteOpenHelper {
List<String[]> providers = getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", " List<String[]> providers = getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", " + TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", " + TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN + " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = " + " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
+ TABLE_LOGIN + "." + COLUMN_USERNAME + TABLE_LOGIN + "." + COLUMN_USERNAME
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'" + " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'" + " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC"); + " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
for (int i = 0; i < providers.size(); i++){
for (int i = providers.size()-1; i >= 0; i--){
if (!isProviderAvailable(providers.get(i)[0], year, month, day, if (!isProviderAvailable(providers.get(i)[0], year, month, day,
starth, startmin, endh, endmin)){ starth, startmin, endh, endmin)){
providers.remove(i); providers.remove(i);
@ -1347,7 +1447,7 @@ public class DBHelper extends SQLiteOpenHelper {
/** /**
* Returns list of [username, first name, last name, rating] of service providers * Returns list of [username, first name, last name, rating] of service providers
* available at the specified time and have a rating equal to or above the specified rating * available at the specified time and have a rating equal to or above the specified rating.
* *
* @param serviceName name of service * @param serviceName name of service
* @param rating minimum rating of filter * @param rating minimum rating of filter
@ -1358,7 +1458,7 @@ public class DBHelper extends SQLiteOpenHelper {
* @param startmin starting minute * @param startmin starting minute
* @param endh ending hour * @param endh ending hour
* @param endmin ending minute * @param endmin ending minute
* @return List of [username, first name, last name, rating] of service providers * @return List of Strings of [username, first name, last name, rating] of service providers
*/ */
public List<String[]> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day, public List<String[]> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day,
int starth, int startmin, int endh, int endmin){ int starth, int startmin, int endh, int endmin){
@ -1368,7 +1468,7 @@ public class DBHelper extends SQLiteOpenHelper {
int i = providers.size()-1; int i = providers.size()-1;
boolean allLowRatingsRemoved = false; boolean allLowRatingsRemoved = false;
while (i>-1 && !allLowRatingsRemoved){ while (i>-1 && !allLowRatingsRemoved){
if (getRatings(providers.get(i)[0], serviceName)>=rating){ if (getAverageRating(providers.get(i)[0], serviceName)>=rating){
allLowRatingsRemoved = true; allLowRatingsRemoved = true;
} else { } else {
providers.remove(i--); providers.remove(i--);
@ -1547,13 +1647,14 @@ public class DBHelper extends SQLiteOpenHelper {
+ COLUMN_BOOKINGMONTH + " = ? AND " + COLUMN_BOOKINGMONTH + " = ? AND "
+ COLUMN_BOOKINGDATE + " = ? AND " + COLUMN_BOOKINGDATE + " = ? AND "
+ COLUMN_BOOKINGSTART + " = ? AND " + COLUMN_BOOKINGSTART + " = ? AND "
+ COLUMN_BOOKINGSTATUS + " != " + Status.CANCELLED.toString() + ")", + COLUMN_BOOKINGSTATUS + " != ?",
new String[] {booking.getServiceprovider().getUsername(), new String[] {booking.getServiceprovider().getUsername(),
booking.getHomeowner().getUsername(), booking.getHomeowner().getUsername(),
String.valueOf(booking.getYear()), String.valueOf(booking.getYear()),
String.valueOf(booking.getMonth()), String.valueOf(booking.getMonth()),
String.valueOf(booking.getDay()), String.valueOf(booking.getDay()),
String.valueOf(booking.getStarth()*60 + booking.getStartmin())}) > 0; String.valueOf(booking.getStarth()*60 + booking.getStartmin()),
Status.CANCELLED.toString()}) > 0;
} }
/** /**
@ -1591,7 +1692,6 @@ public class DBHelper extends SQLiteOpenHelper {
return false; return false;
} }
//now we know for sure that the service provider is available on said day of the week //now we know for sure that the service provider is available on said day of the week
//we check to see if any of the bookings overlap on this time slot //we check to see if any of the bookings overlap on this time slot
cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND}, cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
@ -1618,5 +1718,38 @@ public class DBHelper extends SQLiteOpenHelper {
return true; return true;
} }
private List<Booking> getBookings(Cursor cursor, ServiceProvider serviceProvider, HomeOwner homeOwner){
List<Booking> bookingList = new ArrayList<>();
if (cursor.moveToFirst()) {
for (int i = 0; i < cursor.getCount(); i++) {
int startTime = cursor.getInt(6);
int endTime = cursor.getInt(7);
int starth = startTime / 60;
int startmin = startTime % 60;
int endh = endTime / 60;
int endmin = endTime % 60;
int day = cursor.getInt(5);
int month = cursor.getInt(4);
int year = cursor.getInt(3);
String stat = cursor.getString(8);
Status status = (stat.equals("Pending") ? Status.PENDING :
stat.equals("Confirmed") ? Status.CONFIRMED : Status.CANCELLED);
ServiceProvider serviceprovider = (serviceProvider == null ?
(ServiceProvider) findUserByUsername(cursor.getString(0)) : serviceProvider);
HomeOwner homeowner = (homeOwner == null ?
(HomeOwner) findUserByUsername(cursor.getString(1)) : homeOwner);
Service service = findService(cursor.getString(3));
Booking booking = new Booking(starth, startmin, endh, endmin, day, month, year,
serviceprovider, homeowner, service);
booking.setStatus(status);
bookingList.add(booking);
cursor.moveToNext();
}
}
return bookingList;
}
} }

View file

@ -12,6 +12,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import java.util.List; import java.util.List;
import com.uottawa.olympus.olympusservices.Booking.Status;
import static org.junit.Assert.*; import static org.junit.Assert.*;
@ -412,9 +413,35 @@ public class DBIntegrationTest {
dbHelper.deleteAll(); dbHelper.deleteAll();
} }
@Test
public void testGetByTime(){
setUp(TestAfter.AVAILABILITY);
//December 3 2020 is a Thursday
List<String[]> providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
12, 3, 6, 12, 10, 0);
assertEquals(0, providers.size());
providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
12, 3, 7, 12, 10, 0);
assertEquals(1, providers.size());
String[] firstProvider = providers.get(0);
assertEquals("jbO4aBF4dC", firstProvider[0]);
assertEquals("Jack", firstProvider[1]);
assertEquals("Black", firstProvider[2]);
assertEquals(0, Double.parseDouble(firstProvider[3]), 0.0001);
//December 4 2020 is a Friday
providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
12, 4, 10, 0, 13, 0);
assertEquals(2, providers.size());
}
@Test @Test
public void testAddBooking(){ public void testAddBooking(){
setUp(TestAfter.BOOKING); setUp(TestAfter.AVAILABILITY);
//December 1, 2020 is a Tuesday. Provider is available from 5:20 to 21:11 //December 1, 2020 is a Tuesday. Provider is available from 5:20 to 21:11
boolean added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman", boolean added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
@ -425,7 +452,7 @@ public class DBIntegrationTest {
2020, 12, 1, 9, 12, 12, 0); 2020, 12, 1, 9, 12, 12, 0);
assertTrue(!added); assertTrue(!added);
//December 3, 2020 is was a Thursday. Provider is available from 7:12 to 15:14 //December 3, 2020 is a Thursday. Provider is available from 7:12 to 15:14
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman", added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
2020, 12, 3, 6, 12, 7, 30); 2020, 12, 3, 6, 12, 7, 30);
assertTrue(!added); assertTrue(!added);
@ -438,9 +465,65 @@ public class DBIntegrationTest {
dbHelper.deleteAll(); dbHelper.deleteAll();
} }
@Test
public void testViewListOfBookings(){
setUp(TestAfter.AVAILABILITY);
List<Booking> bookings = dbHelper.findBookings("jbO4aBF4dC");
assertEquals(0, bookings.size());
bookings = dbHelper.findBookings("7MuF1c59XP");
assertEquals(0, bookings.size());
bookings = dbHelper.findBookings("DW44FkUsX7");
assertEquals(0, bookings.size());
dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
2020, 12, 1, 8, 12, 10, 0);
bookings = dbHelper.findBookings("jbO4aBF4dC");
assertEquals(1, bookings.size());
bookings = dbHelper.findBookings("7MuF1c59XP");
assertEquals(1, bookings.size());
bookings = dbHelper.findBookings("DW44FkUsX7");
assertEquals(0, bookings.size());
dbHelper.addBooking("DW44FkUsX7", "7MuF1c59XP", "petting cats",
2020, 12, 4, 10, 0, 10, 30);
bookings = dbHelper.findBookings("jbO4aBF4dC");
assertEquals(1, bookings.size());
bookings = dbHelper.findBookings("7MuF1c59XP");
assertEquals(2, bookings.size());
bookings = dbHelper.findBookings("DW44FkUsX7");
assertEquals(1, bookings.size());
dbHelper.deleteAll();
}
@Test
public void testConfirmAndCancelBooking(){
setUp(TestAfter.AVAILABILITY);
Booking booking = new Booking(8, 12, 10, 0,1,
12, 2020, (ServiceProvider)dbHelper.findUserByUsername("jbO4aBF4dC"),
(HomeOwner)dbHelper.findUserByUsername("7MuF1c59XP"), dbHelper.findService("Hitman"));
dbHelper.addBooking(booking);
assertTrue(dbHelper.confirmBooking(booking));
List<Booking> bookings = dbHelper.findBookings("jbO4aBF4dC");
Booking dbBooking = bookings.get(0);
assertEquals(Status.CONFIRMED, dbBooking.getStatus());
assertTrue(dbHelper.cancelBooking(booking));
bookings = dbHelper.findBookings("jbO4aBF4dC");
dbBooking = bookings.get(0);
assertEquals(Status.CANCELLED, dbBooking.getStatus());
bookings = dbHelper.findNonCancelledBookings("jbO4aBF4dC");
assertEquals(0, bookings.size());
dbHelper.deleteAll();
}
// @Test // @Test
// public void testConfirmBooking(){ // public void testRating(){
// setUp(TestAfter.RATING);
// //
// } // }
@ -483,6 +566,7 @@ public class DBIntegrationTest {
dbHelper.addServiceProvidedByUser(serviceProvider2, service2); dbHelper.addServiceProvidedByUser(serviceProvider2, service2);
if (!testAfter.equals(TestAfter.LINK)){ if (!testAfter.equals(TestAfter.LINK)){
//serviceProvider1 is available on Monday, Tuesday, Thursday, and Friday
serviceProvider1.setAvailabilities(0, 4, 18, 19, 30); serviceProvider1.setAvailabilities(0, 4, 18, 19, 30);
serviceProvider1.setAvailabilities(1, 5, 20, 21, 11); serviceProvider1.setAvailabilities(1, 5, 20, 21, 11);
serviceProvider1.setAvailabilities(3, 7, 12, 15, 14); serviceProvider1.setAvailabilities(3, 7, 12, 15, 14);
@ -490,6 +574,11 @@ public class DBIntegrationTest {
dbHelper.updateAvailability(serviceProvider1); dbHelper.updateAvailability(serviceProvider1);
//serviceProvider2 is only available on Friday
serviceProvider2.setAvailabilities(4, 10, 0, 23, 29);
dbHelper.updateAvailability(serviceProvider2);
if (!testAfter.equals(TestAfter.AVAILABILITY)){ if (!testAfter.equals(TestAfter.AVAILABILITY)){
Booking booking1 = new Booking(8, 12, 10, 0,1, Booking booking1 = new Booking(8, 12, 10, 0,1,
12, 2020, serviceProvider1, homeOwner1, service1); 12, 2020, serviceProvider1, homeOwner1, service1);
@ -498,6 +587,5 @@ public class DBIntegrationTest {
} }
} }
} }
} }