def test_mitaPuuttuu(self): # Resepti test_data = u"Reseptitiedosto\n"\ + u"Makaroonilaatikko\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tSipulia\t150g\n"\ + u"\tMakaronia\t150g\n"\ + u"\tMaitoa\t3dl\n"\ + u"OHJEET\n"\ + u"vlablalsa\n"\ + u"asdasd" self.input_file = StringIO(test_data) kirja = reseptiMod.ReseptiKirja() try: kirja.lataaResepti(self.input_file) except IOError: self.fail( "Loading a correctly structured file caused an exception") self.input_file.close() resepti = kirja.haeNimi("makaroonilaatikko") # Jääkaapin sisältö test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\ + u"Makarooni\t500\tg" self.input_file = StringIO(test_data) kaappi = JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail( "Loading a correctly structured file caused an exception") self.input_file.close() # Mitä puuttuu #print(resepti,"reseptinä") puuttuu = kaappi.mitaPuuttuu(resepti) # TODO self.assertEqual("Sipulia", puuttuu[0][0].nimi, "identifying missing failed") self.assertEqual(1, len(puuttuu), "identifying missing amount failed") # TODO lisää sipuli ja tarkista uudestaan #Lisätään sipuli sipuli = ainesMod.ruokaAines("sipuli") test_data += u"\nSipuli\t150\tg" self.input_file = StringIO(test_data) try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail( "Loading a correctly structured file caused an exception") #puuttuuko vielä? puuttuu = kaappi.mitaPuuttuu(resepti) # TODO self.assertEqual(0, len(puuttuu), "identifying missing amount failed")
def test_search_allergy_nofile( self): # LATAA JÄÄKAAPPI test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\ + u"Pähkinä\t1\tkpl\ta\t1g\tP\n"\ + u"Sipuli\t1\tkpl" self.input_file = StringIO(test_data) kaappi = jaakaappiMod.JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # LATAA ALLERGIATIEDOT test_data = u"Allergiatiedot\n"\ + u"# test comment\n"\ + u"Maito\t\tL\n"\ + u"Pähkinä\t\tP\n"\ + u"Snickers\tP" self.input_file = StringIO(test_data) try: kaappi.lataaAllergiat(self.input_file) except IOError: self.fail("Loading a correctly structured allergy file caused an exception") self.input_file.close() # LATAA RESEPTIT test_data = u"Reseptitiedosto\n"\ + u"Pähkinävuoka\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tPähkinä\t150g\n"\ + u"\tJauhoja\t150g\n"\ + u"\tSipulia\t3dl\n"\ + u"OHJEET\n"\ + u"Peanut butterr"\ + u"Jelly time\n" self.input_file = StringIO(test_data) kirja = reseptiMod.ReseptiKirja() try: kirja.lataaResepti(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # SUORITA HAKU, ei pähkinää (['P']) tulos = haeValmistettavat( kirja, kaappi,4,['P']) self.assertEqual( len(tulos), 0) # Normaali haku tulos = haeValmistettavat( kirja, kaappi,4) self.assertEqual( len(tulos), 1)
def test_search_nofile( self): # LATAA JÄÄKAAPPI test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\ #+ u"Sipuli\t1\tkpl" #+ u"Sipuli\t1\tkpl\ta\t100g" self.input_file = StringIO(test_data) kaappi = jaakaappiMod.JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # LATAA RESEPTIT test_data = u"Reseptitiedosto\n"\ + u"Makaroonilaatikko\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tSipulia\t150g\n"\ + u"\tMakaronia\t150g\n"\ + u"\tMaitoa\t3dl\n"\ + u"OHJEET\n"\ + u"Tee jotainn"\ + u"Ruokaa\n" self.input_file = StringIO(test_data) kirja = reseptiMod.ReseptiKirja() try: kirja.lataaResepti(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # SUORITA HAKU tulos = haeValmistettavat( kirja, kaappi,4) # TULOSTA for t in tulos: print (t[0], "puuttuu",t[1],"ainesta") puuttuvat = [] for a in t[2]: #käy läpi puuttuvat ainekset print("\t",a[0],a[1],a[2],a[3]) puuttuvat.append(a[0]) #print("\t",puuttuvat) # Puuttuu makaronit ja sipuli, eli kaksi asiaa. self.assertEqual( tulos[0][0:2], ("makaroonilaatikko",2))
def alusta(self): # LATAA try: # Reseptit self.kirja = reseptiMod.ReseptiKirja() self.kirja.lataaKansio("./reseptit/") # Jääkaappi self.kaappi = jaakaappiMod.JaaKaappi() try: # sisältö buf = open("./jaakaappi.txt") self.kaappi.lataaJaakaappi(buf) buf.close() # allergiatiedot buf = open("./allergiat.txt") self.kaappi.lataaAllergiat(buf) buf.close() except IOError as e: raise except FileNotFoundError as e: print("Tiedostoa ei löytynyt", str(e)[str(e).index("'"):]) #LAITA UI:n reseptit for resepti in self.kirja.reseptit: self.reseptilista.insert(tkinter.END, resepti.nimi)
def test_search_subrecipe_nofile( self): # LATAA JÄÄKAAPPI test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Maito\t1\tpurkki\ta\t10dl\tVL\t3.4.2016\n"\ + u"Voi\t1\tpurkki\ta\t400g\tVL\t5.4.2016\n"\ + u"Sipuli\t1\tkpl" #TODO fix when no todMaara is defined #+ u"Sipuli\t1\tkpl\ta\t100g" self.input_file = StringIO(test_data) kaappi = jaakaappiMod.JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # LATAA RESEPTIT #piiras test_data = u"Reseptitiedosto\n"\ + u"Kombopiiras\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tSipulia\t150g\n"\ + u"\tJauhelihaa\t150g\n"\ + u"\tVoitaikinaa\t1vuoka\n"\ + u"OHJEET\n"\ + u"Tee jotainn"\ + u"Ruokaa\n" self.input_file = StringIO(test_data) kirja = reseptiMod.ReseptiKirja() try: kirja.lataaResepti(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() #voitaikina test_data = u"Reseptitiedosto\n"\ + u"Voitaikina\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tVoi\t150g\n"\ + u"\tJauhot\t150g\n"\ + u"OHJEET\n"\ + u"Tee diipadaa"\ + u"Ruokaa\n" self.input_file = StringIO(test_data) try: kirja.lataaResepti(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() #mitäs on kirjassa #print(kirja.reseptit, "reseptiejäa") # SUORITA HAKU tulos = haeValmistettavat( kirja, kaappi,40) # TULOSTA for t in tulos: print (t[0], "puuttuu",t[1],"ainesta") if( len(t[3]) != 0): print ("\t","Ainekset, jotka tehdään aliresepteistä:",",".join(t[3])) puuttuvat = [] for a in t[2]: print("\t",a[0],a[1],a[2],a[3]) puuttuvat.append(a[0]) #print("\t",puuttuvat) # Puuttuu makaronit ja sipuli, eli kaksi asiaa. self.assertEqual( tulos[1][0:2], ("kombopiiras",2))
def test_erotus( self): # Ladataan resepti test_data = u"Reseptitiedosto\n"\ + u"Makaroonilaatikko\n"\ + u"1 Vuoka\n"\ + u"RAAKA-AINEET\n"\ + u"\tSipulia\t150g\n"\ + u"\tJauhoja\t2dl\n"\ + u"\tMakaroni\t4dl\n" self.input_file = StringIO(test_data) kirja = reseptiMod.ReseptiKirja() try: kirja.lataaResepti(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() # Ladataan Kaappi test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Sipuli\t150\tg\n" #+ u"Sipuli\t150\tg" self.input_file = StringIO(test_data) kaappi = jaakaappiMod.JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() #testit g - g kaine = kaappi.ruokaAineet[0] raine = kirja.haeNimi('makaroonilaatikko').ainekset[0] #print(raine,kaine) ero = erotus(raine, kaine) self.assertEqual((0,'g') , ero) # Ladataan Kaappi uudelleen test_data = u"Jääkaappitiedosto versio 1.0\n"\ + u"# Matin jääkaappi\n"\ + u"JÄÄKAAPIN SISÄLTÖ\n"\ + u"Sipuli\t50\tg\n"\ + u"Jauhoja\t1\tkg\n"\ + u"Makaronia\t150\tg\n" self.input_file = StringIO(test_data) kaappi = jaakaappiMod.JaaKaappi() try: kaappi.lataaJaakaappi(self.input_file) except IOError: self.fail("Loading a correctly structured file caused an exception") self.input_file.close() #testit sipuli g - g kaine = kaappi.ruokaAineet[0] raine = kirja.haeNimi('makaroonilaatikko').ainekset[0] #print(raine,kaine) ero = erotus(raine, kaine) self.assertEqual((100,'g') , ero) # NYT jauhoilla dl - kg kaine = kaappi.ruokaAineet[1] raine = kirja.haeNimi('makaroonilaatikko').ainekset[1] ero = erotus(raine, kaine) self.assertEqual((0,'dl') , ero) # NYT makaroineilla dl - g kaine = kaappi.ruokaAineet[2] raine = kirja.haeNimi('makaroonilaatikko').ainekset[2] ero = erotus(raine, kaine) self.assertEqual((50.0,'g') , ero)
def paaohjelma(): # LATAA # Asetukset try: asetukset = Asetukset('./asetukset.txt') except BaseException as e: raise if (len(e.args) == 1): print("Virhe,", e.args[0]) else: print("Virhe", e.message) return # MUUT try: # Reseptit kirja = reseptiMod.ReseptiKirja() kirja.lataaKansio(asetukset.reseptikansio) # Jääkaappi kaappi = jaakaappiMod.JaaKaappi() try: # sisältö buf = open(asetukset.jaakaappitiedosto) kaappi.lataaJaakaappi(buf) buf.close() # allergiatiedot buf = open(asetukset.allergiatiedosto) kaappi.lataaAllergiat(buf) buf.close() except IOError as e: raise except FileNotFoundError as e: print("Virhe, Tiedostoa ei löytynyt", str(e)[str(e).index("'"):]) except BaseException as e: if (len(e.args) == 1): print("Virhe,", e.args[0]) else: print("Virhe", e.message) return # TULOSTA """print ("X==================X") print ("| RESEPTIKIRJA | HAE") print ("| 0.7 | OHJEET") print ("| | LISTAA") print ("| | ASETUKSET") print ("| | LOPETA") print ("X==================X")""" komento = '' try: while komento != 'lopeta': # Käsittele komennot if (komento == 'HAE'): # Tarkista allergia-asetukset if (asetukset.allergiatSet == False): print( "Et ole määritellyt vielä allergiatietojasi, haluatko asettaa ne?" ) vastaus = str(input(">:(K/E)")).upper() if (vastaus == 'K'): print("Anna allergiatietosi pilkuilla erotettuna.") ok = False while (ok == False): print("Allergiatiedot annetaan kirjaimin:\n"\ +" L = laktoosi\tG = gluteeni\n"\ +" P = pähkinä") vastaus = str(input(">:")).upper() try: parsitut = ainesMod.parsiAllergiat(vastaus) except ainesMod.AinesParseError as e: print("Virhe,", e.message) else: ok = True #Tallennetaan print( 'Allergia-asetuksesi tallennetaan tiedostoon "asetukset.txt", voit muokata niitä myöhemmin' ) with open("asetukset.txt", "a") as tiedosto: tiedosto.write("allergiat " + ",".join(parsitut) + "\n") # Valikko vastaus = valikko( 'Haluatko hakea:\n'\ +'1) Jääkaapin sisällön perusteella\n'\ +'2) Ainesosan perusteella\n'\ +'2) Nimen perusteella\n', 1,3) #print("Haetaanko jääkaapin sisällön perusteella?") #vastaus = str(input(">:(K/E)")).upper() if (vastaus == 1): print("Kuinka monta puuttuvaa ainesta saa olla?") vastaus = str(input(">:(numero)")).upper() try: puuttuvia = int(vastaus) except ValueError: print("Numero ei kelpaa, oletetaan 0") puuttuvia = 0 valmistettavat = hakuMod.haeValmistettavat( kirja, kaappi, puuttuvia, kaappi.allergiat) if (len(valmistettavat) == 0): print( "Et voi valmistaa mitään jääkaapin sisällöllä (ei löytynyt yhtään reseptiä jonka aineista on väh. yksi aines)" ) else: print("Löytyi", len(valmistettavat), "kpl tuloksia:") for resepti in valmistettavat: print("\t", resepti[0], "(Puuttuu", resepti[1], "ainesosaa)") #print(resepti[2]) print("\t\tPuuttuvat:") for p in resepti[2]: #puuttuvat print("\t\t {0:23} {1} {2} {3}".format( p[0].nimi, p[1], p[2], p[3])) #print("\t\t",p[0].nimi,"\t\t\t"+p[1],p[2],p[3]) print("\t\tEi puutu:") #print(resepti[4]) for p in resepti[4]: #puuttuvat try: print( "\t\t {0:23} {1} {2} ( Kaapissa {3} )" .format(p[0].nimi, p[1], p[2], p[0].todMaara)) except: print( "\t\t {0:23} {1} {2} ( Kaapissa {3} {4})" .format(p[0].nimi, p[1], p[2], p[0].maara, p[0].yksikko)) elif (vastaus == 2): print("Anna hakusana") vastaus = str(input(">:")) try: tulos = kirja.haeNimella(vastaus, 0.6) except functionsMod.NotFoundError: print("Ei tuloksia") else: print("Löytyi", len(tulos), "kpl tuloksia:") for t in tulos: print(" " + t[0].nimi) elif (vastaus == 3): print("Anna ainesosa") vastaus = str(input(">:")) try: tulos = kirja.haeNimella(vastaus, 0.6) except functionsMod.NotFoundError: print("Ei tuloksia") else: print("Löytyi", len(tulos), "kpl tuloksia:") for t in tulos: print(" " + t[0].nimi) else: pass elif (komento == 'LISTAA'): vastaus = valikko( 'Haluatko listata:\n'\ +'1) Jääkaapin\n'\ +'2) Reseptit\n'\ +'3) Tietyn reseptinsisällön\n', 1,3) if (vastaus == 1): kaappi.listaaKaikki() elif (vastaus == 2): kirja.listaaKaikki() elif (vastaus == 3): print("Anna reseptin nimi") vastaus = str(input(">:")) #autocorrect :D try: nimi = kirja.haeNimi(vastaus, 0.6).nimi except functionsMod.NotFoundError: nimi = vastaus # itse haku try: tulos = hakuMod.haeReseptiPuuttuvat( kirja, kaappi, nimi) except functionsMod.NotFoundError: print("Ei tuloksia") else: print("\t", nimi) print("\t\tPuuttuvat:") for p in tulos[2]: #puuttuvat print("\t\t {0:23} {1} {2} {3}".format( p[0].nimi, p[1], p[2], p[3])) print("\t\tEi puutu:") for p in tulos[4]: #puuttuvat try: print("\t\t {0:23} {1} {2} ( Kaapissa {3} )". format(p[0].nimi, p[1], p[2], p[0].todMaara)) except: print( "\t\t {0:23} {1} {2} ( Kaapissa {3} {4})". format(p[0].nimi, p[1], p[2], p[0].maara, p[0].yksikko)) #for aines in tulos.ainekset: # print("\t",aines[0].nimi+"\t"+aines[1]+" "+aines[2]) """ try: tulos = kirja.haeNimi(vastaus, 0.6) except functionsMod.NotFoundError: print("Ei tuloksia") else: print(tulos.nimi) for aines in tulos.ainekset: print("\t",aines[0].nimi+"\t"+aines[1]+" "+aines[2]) """ elif (komento == 'OHJE'): print("""Reseptiohjelma v.10 2016 Ohjelma lataa reseptit ja jääkaapin ja kertoo mitä voidaan valmistaa. Asetukset tiedostossa asetukset.txt """) print(""" HAE Ohjelma siiryy hakutilaan. Mikäli et ole määrittänyt allergioita, tulee ohjelma kysymään allergiatietosi. Ne tallennetaan asetustiedostoon. Käyttäjä voi hakea: (1)Jääkaapin sisällön perusteella (2)Ainesosan perusteella (3)Nimen perusteella Hauissa otetaan allergiatiedot huomioon. (1) Kohdassa listataan myös mitä reseptin aineista puuttuu ja kuinka paljon. OHJE Tulostaa ohjeen LISTAA Ohjelma siiryy listaustilaan. Käyttäjälle voi listata: (1)jääkaapin sisällön (2)ladatut resptit (3)Tietyn reseptin sisällön (3) Kohdassa listataan myös mitä reseptin aineista puuttuu ja kuinka paljon. ASETUKSET Ohjelma tulostaa ladatut asetukset LOPETA Ohjelman suoritus loppuu. Ohjelmasta voi myös poistua ctrl+d yhdistelmällä""") elif (komento == 'ASETUKSET'): print( 'Asetukset ladataan ohjelman käynnistyessä "asetukset.txt"-tiedostosta' ) print('Nykyiset asetukset') print(' allergiat\t\t', ", ".join(asetukset.allergiat)) print(' allergiatiedosto\t', asetukset.allergiatiedosto) print(' jaakaappitiedosto\t', asetukset.jaakaappitiedosto) print(' reseptikansio\t\t', asetukset.reseptikansio) elif (komento == 'LOPETA'): break else: print("X==================X") print("| RESEPTIKIRJA | HAE") print("| 0.7 | OHJEET") print("| | LISTAA") print("| | ASETUKSET") print("| | LOPETA") print("X==================X") # lue uusi komento komento = str(input(">:")).upper() except KeyboardInterrupt: print("\nHyvästi!") except EOFError: print("\nHyvästi!") except BaseException as e: raise if (len(e.args) == 1): print("Virhe,", e.args[0]) else: print("Virhe", e.message) return