#include #include #include #include "test_pr1.h" #include "api.h" // Run all tests for PR1 bool run_pr1(tTestSuite* test_suite, const char* input) { bool ok = true; tTestSection* section = NULL; assert(test_suite != NULL); testSuite_addSection(test_suite, "PR1", "Tests for PR1 exercices"); section = testSuite_getSection(test_suite, "PR1"); assert(section != NULL); ok = run_pr1_ex1(section, input); ok = run_pr1_ex2(section, input) && ok; ok = run_pr1_ex3(section, input) && ok; return ok; } // Run all tests for Exercice 1 of PR1 bool run_pr1_ex1(tTestSection* test_section, const char* input) { bool passed = true, failed = false; const char* version; ///////////////////////////// ///// PR1 EX1 TEST 1 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX1_1", "Read version information."); // Get the version version = api_version(); if (strcmp(version, "UOC PP 20212") != 0) { failed = true; passed = false; } end_test(test_section, "PR1_EX1_1", !failed); return passed; } // Run all tests for Exercice 2 of PR1 bool run_pr1_ex2(tTestSection* test_section, const char* input) { tApiData data; tApiError error; tCSVEntry entry; int nLots; int nVaccines; int nPeople; bool passed = true; bool failed = false; bool fail_all = false; ///////////////////////////// ///// PR1 EX2 TEST 1 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_1", "Initialize the API data structure"); // Initialize the data error = api_initData(&data); if (error != E_SUCCESS) { failed = true; passed = false; fail_all = true; } end_test(test_section, "PR1_EX2_1", !failed); ///////////////////////////// ///// PR1 EX2 TEST 2 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_2", "Add a valid lot"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); csv_parseEntry(&entry, "01/01/2022;13:45;08001;PFIZER;2;21;300", "VACCINE_LOT"); error = api_addVaccineLot(&data, entry); if (error != E_SUCCESS) { failed = true; passed = false; fail_all = true; } csv_freeEntry(&entry); } end_test(test_section, "PR1_EX2_2", !failed); ///////////////////////////// ///// PR1 EX2 TEST 3 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_3", "Check the number of vaccines"); if (fail_all) { failed = true; } else { nVaccines = api_vaccineCount(data); if (nVaccines != 1) { failed = true; passed = false; fail_all = true; } } end_test(test_section, "PR1_EX2_3", !failed); ///////////////////////////// ///// PR1 EX2 TEST 4 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_4", "Check the number of vaccine lots"); if (fail_all) { failed = true; } else { nLots = api_vaccineLotsCount(data); if (nLots != 1) { failed = true; passed = false; fail_all = true; } } end_test(test_section, "PR1_EX2_4", !failed); ///////////////////////////// ///// PR1 EX2 TEST 5 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_5", "Add a lot with invalid type"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); csv_parseEntry(&entry, "01/01/2022;13:45;08001;PFIZER;2;21;300", "VACCINE_LOT_DATA"); error = api_addVaccineLot(&data, entry); if (error != E_INVALID_ENTRY_TYPE) { failed = true; passed = false; } csv_freeEntry(&entry); } end_test(test_section, "PR1_EX2_5", !failed); ///////////////////////////// ///// PR1 EX2 TEST 6 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_6", "Add a lot with invalid fields"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); csv_parseEntry(&entry, "01/01/2022;13:45;08001;PFIZER;2;21;300;extra_field", "VACCINE_LOT"); error = api_addVaccineLot(&data, entry); if (error != E_INVALID_ENTRY_FORMAT) { failed = true; passed = false; } csv_freeEntry(&entry); } end_test(test_section, "PR1_EX2_6", !failed); ///////////////////////////// ///// PR1 EX2 TEST 7 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_7", "Free API data"); if (fail_all) { failed = true; } else { error = api_freeData(&data); nVaccines = api_vaccineCount(data); nLots = api_vaccineLotsCount(data); nPeople = api_populationCount(data); if (error != E_SUCCESS || nVaccines != 0 || nLots != 0 || nPeople != 0) { failed = true; passed = false; fail_all = true; } } end_test(test_section, "PR1_EX2_7", !failed); ///////////////////////////// ///// PR1 EX2 TEST 8 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX2_8", "Load data from file"); // Load basic data to the API if (fail_all) { failed = true; } else { error = api_loadData(&data, input, true); nVaccines = api_vaccineCount(data); nLots = api_vaccineLotsCount(data); nPeople = api_populationCount(data); if (error != E_SUCCESS || nVaccines != 2 || nLots != 5 || nPeople != 2) { failed = true; passed = false; } } end_test(test_section, "PR1_EX2_8", !failed); // Release all data api_freeData(&data); return passed; } // Run all tests for Exercice 3 of PR1 bool run_pr1_ex3(tTestSection* test_section, const char* input) { tApiData data; tApiError error; tCSVEntry entry; tCSVEntry refEntry; tCSVData report; tCSVData refReport; tDateTime timestamp; int nLots; int nVaccines; int nPeople; bool passed = true; bool failed = false; bool fail_all = false; // Initialize the data error = api_initData(&data); if (error != E_SUCCESS) { passed = false; fail_all = true; } if (!fail_all) { error = api_loadData(&data, input, true); nVaccines = api_vaccineCount(data); nLots = api_vaccineLotsCount(data); nPeople = api_populationCount(data); if (error != E_SUCCESS || nVaccines != 2 || nLots != 5 || nPeople != 2) { passed = false; fail_all = true; } } ///////////////////////////// ///// PR1 EX3 TEST 1 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_1", "Request a valid vaccine"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); csv_initEntry(&refEntry); csv_parseEntry(&refEntry, "PFIZER;2;21", "VACCINE"); error = api_getVaccine(data, "PFIZER", &entry); if (error != E_SUCCESS || !csv_equalsEntry(entry, refEntry)) { failed = true; passed = false; } csv_freeEntry(&entry); csv_freeEntry(&refEntry); } end_test(test_section, "PR1_EX3_1", !failed); ///////////////////////////// ///// PR1 EX3 TEST 2 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_2", "Request a missing vaccine"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); error = api_getVaccine(data, "NO_VACC", &entry); if (error != E_VACCINE_NOT_FOUND) { failed = true; passed = false; } csv_freeEntry(&entry); } end_test(test_section, "PR1_EX3_2", !failed); ///////////////////////////// ///// PR1 EX3 TEST 3 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_3", "Request a valid vaccine lot"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); csv_initEntry(&refEntry); csv_parseEntry(&refEntry, "01/01/2022;13:45;08001;PFIZER;2;21;350", "VACCINE_LOT"); dateTime_parse(×tamp, "01/01/2022", "13:45"); error = api_getVaccineLot(data, "08001", "PFIZER", timestamp, &entry); if (error != E_SUCCESS || !csv_equalsEntry(entry, refEntry)) { failed = true; passed = false; } csv_freeEntry(&entry); csv_freeEntry(&refEntry); } end_test(test_section, "PR1_EX3_3", !failed); ///////////////////////////// ///// PR1 EX3 TEST 4 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_4", "Request a missing vaccine lot"); if (fail_all) { failed = true; } else { csv_initEntry(&entry); dateTime_parse(×tamp, "01/01/2022", "13:45"); error = api_getVaccineLot(data, "10001", "NO_VACC", timestamp, &entry); if (error != E_LOT_NOT_FOUND) { failed = true; passed = false; } csv_freeEntry(&entry); } end_test(test_section, "PR1_EX3_4", !failed); ///////////////////////////// ///// PR1 EX3 TEST 5 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_5", "Get registered vaccines"); if (fail_all) { failed = true; } else { csv_init(&report); csv_init(&refReport); csv_addStrEntry(&refReport, "MODERNA;1;0", "VACCINE"); csv_addStrEntry(&refReport, "PFIZER;2;21", "VACCINE"); error = api_getVaccines(data, &report); if (error != E_SUCCESS || !csv_equals(report, refReport)) { failed = true; passed = false; } csv_free(&report); csv_free(&refReport); } end_test(test_section, "PR1_EX3_5", !failed); ///////////////////////////// ///// PR1 EX3 TEST 6 ////// ///////////////////////////// failed = false; start_test(test_section, "PR1_EX3_6", "Get registered vaccine lots"); if (fail_all) { failed = true; } else { csv_init(&report); csv_init(&refReport); csv_addStrEntry(&refReport, "01/01/2022;13:45;08001;PFIZER;2;21;350", "VACCINE_LOT"); csv_addStrEntry(&refReport, "01/01/2022;13:45;08500;PFIZER;2;21;300", "VACCINE_LOT"); csv_addStrEntry(&refReport, "02/01/2022;18:00;08500;MODERNA;1;0;100", "VACCINE_LOT"); csv_addStrEntry(&refReport, "02/01/2022;15:45;08001;MODERNA;1;0;100", "VACCINE_LOT"); csv_addStrEntry(&refReport, "03/01/2022;13:45;08500;PFIZER;2;21;70", "VACCINE_LOT"); error = api_getVaccineLots(data, &report); if (error != E_SUCCESS || !csv_equals(report, refReport)) { failed = true; passed = false; } csv_free(&report); csv_free(&refReport); } end_test(test_section, "PR1_EX3_6", !failed); // Release all data api_freeData(&data); return passed; }