def test_Parser_getTimes_single(): times = Parser('+ @12:00 "Get coffee" #1234567899').getTimes() assert times == [datetime(2020, 7, 1, 12, 0, 0)]
def test_Parser_getRecipients_double_noPound(): assert Parser('+ @12:00 "Get coffee" 12345678993216549875').getRecipients() == []
def test_Parser_getRecipients_diffOrder(): assert Parser('+ @12:00 #1234567899 "Get coffee"').getRecipients() == ['1234567899']
def test_Parser_getRecipients_single_extraPound(): assert Parser('+ @12:00 "Get coffee" #1234567899#').getRecipients() == ['1234567899']
def test_Parser_getRecipients_double_semicolon(): assert Parser('+ @12:00 "Get coffee" #1234567899;#2342342345').getRecipients() == ['1234567899', '2342342345']
def test_Parser_parseMessage_quotes_multiple(): Parser('+ @14:00@12:00@9:00 "Pick up cake and \'cheese\'" "Get \'chicken\'" #2342342344#8578478574').getMessage() == ['"Pick up cake and \'cheese\'"', '"Get \'chicken\'"']
def test_Parser_requestIsValid_noRecipient(): assert Parser('+ @12:00 "Get coffee"').requestIsValid() == False
def test_Parser_getTimes_noChar(): times = Parser('+ @12:00@13:00 "Get coffee" #1234567899').getTimes() assert times == [datetime(2009, 5, 8, 12, 0, 0), datetime(2009, 5, 8, 13, 0, 0)]
def test_Parser_getTimes_semicolon(): times = Parser('+ @12:00;@13:00 "Get coffee" #1234567899').getTimes() assert times == [datetime(2020, 12, 30, 12, 0, 0), datetime(2020, 12, 29, 13, 0, 0)]
def test_Parser_getTimes_double_noAt(): times = Parser('+ 12:0013:00 "Get coffee" #1234567899').getTimes() assert times == []
def test_Parser_getTimes_space(): times = Parser('+ @12:00 @13:00 "Get coffee" #1234567899').getTimes() assert times == [datetime(1999, 8, 13, 12, 0, 0), datetime(1999, 8, 13, 13, 0, 0)]
def test_Parser_getTimes_singleExtraAt(): times = Parser('+ @12:00@ "Get coffee" #1234567899').getTimes() assert times == [datetime(2020, 2, 15, 12, 0, 0)]
def test_Parser_getTimes_singleWSemicolon(): times = Parser('+ @12:00; "Get coffee" #1234567899').getTimes() assert times == [datetime(2020, 4, 20, 12, 0, 0)]
def test_Parser_requestIsValid_true(): assert Parser('+ @12:00 "Get coffee" #1234567899').requestIsValid() == True
def test_Parser_parseMessage_quotes(): Parser('+ @14:00@12:00@9:00 "Pick up cake and \'cheese\'" #2342342344#8578478574').getMessage() == ['"Pick up cake and \'cheese\'"']
def test_Parser_getTimes_diffOrder(): times = Parser('+ "Get Coffee and Tea" #1231231234 @12:00').getTimes() assert times == [datetime(2020, 1, 1, 12, 0, 0)]
def test_Parser_parseMessage_multiple(): Parser('+ @14:00@12:00@9:00 "Pick up cake and cheese" "Grab coffee for road" #2342342344#8578478574').getMessage() == ['"Pick up cake and cheese"', '"Grab coffee for road"']
def test_Parser_getTimes_diffOrderMultiple(): times = Parser('+ #1231231234 "Get coffee and a tea." @1:00@19:50').getTimes() assert times == [datetime(2020, 7, 1, 1, 0, 0), datetime(2020, 6, 30, 19, 50, 0)]
def test_Parser_requestIsValid_noTime(): assert Parser('+ "Get coffee" #1234567899').requestIsValid() == False
def test_Parser_requestIsValid_noMessage(): assert Parser('+ @12:00 #1234567899').requestIsValid() == False