def create_beer():
    beer_name = _get_parameter_value('name',True)
    try:
        db_adapter.get_beer_by_name(beer_name)
        abort(400, 'Beer named "' + beer_name + '" already exists')
    except BeerException:
        new_beer = brew_logic.Beer(beer_name, "Undefined", -1, -1, -1, -1, 0)
        db_adapter.store_beer(new_beer);
        response.status = 204
 def test_get_all_beers(self):
     beer1 = brew_logic.Beer('Random Encounter', 'Hefeweizen', time.time() - 20000, time.time() - 10000, time.time() - 10000, time.time() - 5000, 7, 'Awesome hefe!',0);
     beer2 = brew_logic.Beer('Bitter End', 'IPA', time.time() - 20000, time.time() - 10000, time.time() - 10000, time.time() - 5000, 9, 'Great IPA!',1);
     db_adapter.store_beer(beer1)
     db_adapter.store_beer(beer2)
     response, content = self._call_GET_with_credentials('http://localhost:8080/chestfreezer/api/beer')        
     assert(response.status == 200)                        
     data = json.loads(content)
     assert(len(data) == 2)
 def test_modify_beer(self):
     beer = brew_logic.Beer('Test Beer', 'Weirdstyle', -1, -1, -1, -1, 4, 'S.M.A.S.H', 10);
     db_adapter.store_beer(beer)
     response = self._call_PUT_with_credentials_and_body('http://localhost:8080/chestfreezer/api/beer/10', '{ "name":"Test Beer Mk2","style":"S.M.A.S.H.","fermenting_from":100000,"fermenting_to":200000,"conditioning_from":300000,"conditioning_to":400000,"rating":10,"comments":"this is cool" }', 'application/json')[0]        
     assert(response.status == 200)
     modified_beer = db_adapter.get_beer_by_name('Test Beer Mk2')
     assert modified_beer.style == 'S.M.A.S.H.'
     assert modified_beer.fermenting_from_timestamp == 82800
     assert modified_beer.fermenting_to_timestamp == 169200
     assert modified_beer.conditioning_from_timestamp == 255600
     assert modified_beer.conditioning_to_timestamp == 342000
     assert modified_beer.rating == 10
     assert modified_beer.comments == "this is cool"
 def test_beer_status_emails(self):
     # swap out the email sending methods
     def print_email_to_be_sent(beer, is_for_tomorrow, name):
         print 'Send email due to ' + name + ' for beer "' + beer.name + ', for tomorrow: ' + str(is_for_tomorrow) 
     emailer.send_fermentation_email = lambda beer, is_for_tomorrow : print_email_to_be_sent(beer, is_for_tomorrow, 'Fermentation')        
     emailer.send_dryhopping_email = lambda beer, is_for_tomorrow : print_email_to_be_sent(beer, is_for_tomorrow, 'Dryhopping')
     emailer.send_conditioning_email = lambda beer, is_for_tomorrow : print_email_to_be_sent(beer, is_for_tomorrow, 'Conditioning')
     # create the beer
     fermenting_from = datetime.datetime(2014,2,6).strftime("%s")
     fermenting_to = datetime.datetime(2014,2,10).strftime("%s")
     dryhopping_from = datetime.datetime(2014,2,10).strftime("%s")
     dryhopping_to = datetime.datetime(2014,2,14).strftime("%s")
     conditioning_from = datetime.datetime(2014,2,14).strftime("%s")
     conditioning_to = datetime.datetime(2014,2,22).strftime("%s")
     beer = Beer('Random Encounter', 'Hefeweizen', fermenting_from, fermenting_to, conditioning_from, conditioning_to, 7, 'Test Beer', 0, dryhopping_from, dryhopping_to);        
     db_adapter.store_beer(beer)
     print db_adapter.get_beer_by_name('Random Encounter')        
     
     # so as to not wait
     brew_logic._get_seconds_in_day = lambda : 1
     brew_logic._get_seconds_in_hour = lambda : 1
     
     # we start at the specified date
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,01,31);
     brew_logic.start_beer_monitoring_thread()
             
     # nothing should happen, we move the time to one day before  the fermenting starts
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,5);
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,6);
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,9);
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,10);
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,14);
     time.sleep(1)
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,20);
     brew_logic._get_current_datetime = lambda : datetime.datetime(2014,2,22);
     
     # VERIFICATION STILL NEEDS TO OCCUR! I just don't have time for it :p
     brew_logic.should_threads_run = False  # @UndefinedVariable end!
def modify_beer(beer_id):
    try:
        beer = db_adapter.get_beer_by_id(beer_id)
    except BeerException:
        abort(404, 'Beer with id ' + beer_id + '" does not exist')   
    # name
    new_name = _get_parameter_value('name')
    if new_name: beer.name = new_name        
    # style
    new_style = _get_parameter_value('style')
    if new_style: beer.style = new_style
    # fermentation
    new_fermenting_from = _get_integer_value('fermenting_from')
    if new_fermenting_from: beer.fermenting_from_timestamp = new_fermenting_from
    new_fermenting_to = _get_integer_value('fermenting_to')
    if new_fermenting_to: beer.fermenting_to_timestamp = new_fermenting_to
    # dryhopping
    new_dryhopping_from = _get_integer_value('dryhopping_from')
    if new_dryhopping_from: beer.dryhopping_from_timestamp = new_dryhopping_from
    new_dryhopping_to = _get_integer_value('dryhopping_to')
    if new_dryhopping_to: beer.dryhopping_to_timestamp = new_dryhopping_to
    # conditioning
    new_conditioning_from = _get_integer_value('conditioning_from')
    if new_conditioning_from: beer.conditioning_from_timestamp = new_conditioning_from
    new_conditioning_to = _get_integer_value('conditioning_to')
    if new_conditioning_to: beer.conditioning_to_timestamp = new_conditioning_to    
    # rating
    new_rating = _get_integer_value('rating')
    if new_rating: beer.rating = new_rating
    # comments
    new_comments = _get_parameter_value('comments')
    if new_comments: beer.comments = new_comments
    # verify & store! 
    try:
        beer._verifyDataMakeSense();
        db_adapter.store_beer(beer)
        response.status = 204
    except BeerException as e:
        abort(400, str(e))
 def test_store_retrieve_beer(self):
     new_beer = Beer('Random Encounter', 'Hefeweizen', time.time() - 20000, time.time() - 10000, time.time() - 4900, time.time(), 7, 'Awesome hefe!', dryhopping_from_timestamp = (time.time() - 10000), dryhopping_to_timestamp = (time.time() - 5000))
     assert len(db_adapter.get_all_beers()) == 0
     db_adapter.store_beer(new_beer)
     assert len(db_adapter.get_all_beers()) == 1
     try:
         assert len(db_adapter.get_beer_by_name('wrong_name'))
         assert False                 
     except BeerException:
         pass #all good, beer did not exist (as expected)                
     retrieved_beer = db_adapter.get_beer_by_name('Random Encounter')
     assert retrieved_beer.name == new_beer.name
     # also modify some data
     retrieved_beer.name = 'Random Encounter Mk2'
     retrieved_beer.comments = 'Improved version!'
     retrieved_beer.rating = 10
     retrieved_beer._verifyDataMakeSense();
     db_adapter.store_beer(retrieved_beer)
     twice_retriever = db_adapter.get_beer_by_name('Random Encounter Mk2')
     assert twice_retriever.rating == 10
     db_adapter.delete_beer_by_name('Random Encounter Mk2')
     assert len(db_adapter.get_all_beers()) == 0
     print new_beer
 def test_delete_beer(self):
     beer = brew_logic.Beer('Test Beer', 'Whatever', -1, -1, -1, -1, 4, 'S.M.A.S.H', 1);
     db_adapter.store_beer(beer)
     response = self._call_DELETE_with_credentials('http://localhost:8080/chestfreezer/api/beer/1')[0]
     assert(response.status == 204)
     assert len(db_adapter.get_all_beers()) == 0