Coverage report: 87%

Files Functions Classes

coverage.py v7.10.7, created at 2025-09-23 17:56 +0000

File function statements missing excluded coverage
backend/app/__init__.py (no function) 0 0 0 100%
backend/app/config.py (no function) 15 0 0 100%
backend/app/database.py get_db 4 4 0 0%
backend/app/database.py (no function) 10 0 0 100%
backend/app/eis/__init__.py (no function) 0 0 0 100%
backend/app/eis/email_scraper.py clean_email_address 2 0 0 100%
backend/app/eis/email_scraper.py get_user_id_from_email 4 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.__init__ 7 0 0 100%
backend/app/eis/email_scraper.py GmailScraper._load_credentials 8 4 0 50%
backend/app/eis/email_scraper.py GmailScraper.authenticate 12 3 0 75%
backend/app/eis/email_scraper.py GmailScraper.get_email_ids 8 8 0 0%
backend/app/eis/email_scraper.py GmailScraper._extract_email_body 14 14 0 0%
backend/app/eis/email_scraper.py GmailScraper._decode_base64 1 1 0 0%
backend/app/eis/email_scraper.py GmailScraper.get_email_data 20 20 0 0%
backend/app/eis/email_scraper.py GmailScraper.save_email_to_db 8 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.extract_linkedin_job_ids 3 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.get_indeed_redirected_url 11 11 0 0%
backend/app/eis/email_scraper.py GmailScraper.extract_indeed_job_ids 12 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.save_jobs_to_db 15 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.save_job_data_to_db 15 0 0 100%
backend/app/eis/email_scraper.py GmailScraper.run_scraping 22 22 0 0%
backend/app/eis/email_scraper.py GmailScraper._process_user_emails 26 8 0 69%
backend/app/eis/email_scraper.py GmailScraper._process_email 28 9 0 68%
backend/app/eis/email_scraper.py GmailScraper._scrape_remaining_jobs 29 2 0 93%
backend/app/eis/email_scraper.py GmailScraperService.__init__ 4 4 0 0%
backend/app/eis/email_scraper.py GmailScraperService.start 9 9 0 0%
backend/app/eis/email_scraper.py GmailScraperService.stop 10 10 0 0%
backend/app/eis/email_scraper.py GmailScraperService._run_service 13 13 0 0%
backend/app/eis/email_scraper.py GmailScraperService.status 1 1 0 0%
backend/app/eis/email_scraper.py (no function) 57 2 0 96%
backend/app/eis/job_scraper.py JobScrapper.__init__ 8 8 0 0%
backend/app/eis/job_scraper.py JobScrapper._load_credentials 8 8 0 0%
backend/app/eis/job_scraper.py JobScrapper.get_snapshot 11 11 0 0%
backend/app/eis/job_scraper.py JobScrapper.wait_for_data 17 17 0 0%
backend/app/eis/job_scraper.py JobScrapper.retrieve_data 11 11 0 0%
backend/app/eis/job_scraper.py JobScrapper.process_job_data 1 1 0 0%
backend/app/eis/job_scraper.py JobScrapper.scrape_job 4 4 0 0%
backend/app/eis/job_scraper.py IndeedJobScraper.process_job_data 18 18 0 0%
backend/app/eis/job_scraper.py LinkedinJobScraper.process_job_data 17 17 0 0%
backend/app/eis/job_scraper.py extract_indeed_jobs_from_email 9 1 0 89%
backend/app/eis/job_scraper.py parse_indeed_job_section 51 8 0 84%
backend/app/eis/job_scraper.py (no function) 39 6 0 85%
backend/app/eis/location_parser.py LocationParser.__init__ 6 0 0 100%
backend/app/eis/location_parser.py LocationParser.extract_postcode 15 0 0 100%
backend/app/eis/location_parser.py LocationParser.extract_attendance_type 13 0 0 100%
backend/app/eis/location_parser.py LocationParser.extract_country_with_match 11 0 0 100%
backend/app/eis/location_parser.py LocationParser.parse_location 34 0 0 100%
backend/app/eis/location_parser.py LocationParser.parse_location_only 2 0 0 100%
backend/app/eis/location_parser.py (no function) 9 0 0 100%
backend/app/eis/models.py (no function) 47 0 0 100%
backend/app/eis/routers.py get_service_logs_by_date_range 14 14 0 0%
backend/app/eis/routers.py (no function) 13 0 0 100%
backend/app/eis/schemas.py (no function) 44 0 0 100%
backend/app/main.py read_root 1 1 0 0%
backend/app/main.py health_check 1 1 0 0%
backend/app/main.py (no function) 28 0 0 100%
backend/app/models.py CommonBase.__tablename__ 2 0 0 100%
backend/app/models.py Location.name 8 0 0 100%
backend/app/models.py Person.name 1 0 0 100%
backend/app/models.py Person.name_company 3 0 0 100%
backend/app/models.py Job.name 5 1 0 80%
backend/app/models.py (no function) 128 0 0 100%
backend/app/oauth2.py create_access_token 5 0 0 100%
backend/app/oauth2.py verify_access_token 9 3 0 67%
backend/app/oauth2.py get_current_user 4 0 0 100%
backend/app/oauth2.py (no function) 14 0 0 100%
backend/app/routers/__init__.py generate_data_table_crud_router 15 0 0 100%
backend/app/routers/__init__.py generate_data_table_crud_router.handle_many_to_many_create 11 2 0 82%
backend/app/routers/__init__.py generate_data_table_crud_router.handle_many_to_many_update 12 12 0 0%
backend/app/routers/__init__.py generate_data_table_crud_router.get_all 25 9 0 64%
backend/app/routers/__init__.py generate_data_table_crud_router.get_one 6 0 0 100%
backend/app/routers/__init__.py generate_data_table_crud_router.create 18 1 0 94%
backend/app/routers/__init__.py generate_data_table_crud_router.update 21 2 0 90%
backend/app/routers/__init__.py generate_data_table_crud_router.delete 14 0 0 100%
backend/app/routers/__init__.py (no function) 6 0 0 100%
backend/app/routers/dashboard.py get_dashboard_data 40 0 0 100%
backend/app/routers/dashboard.py (no function) 8 0 0 100%
backend/app/routers/data_tables.py download_file 14 4 0 71%
backend/app/routers/data_tables.py (no function) 17 0 0 100%
backend/app/routers/export.py export_jobs_with_all_columns 18 0 0 100%
backend/app/routers/export.py (no function) 12 0 0 100%
backend/app/routers/login.py login 9 1 0 89%
backend/app/routers/login.py (no function) 8 0 0 100%
backend/app/routers/user.py assert_admin 2 0 0 100%
backend/app/routers/user.py get_all_users 21 16 0 24%
backend/app/routers/user.py get_current_user_profile 1 0 0 100%
backend/app/routers/user.py get_one_user 5 0 0 100%
backend/app/routers/user.py update_current_user_profile 17 3 0 82%
backend/app/routers/user.py update_user 14 1 0 93%
backend/app/routers/user.py create_user 14 1 0 93%
backend/app/routers/user.py (no function) 17 0 0 100%
backend/app/schemas.py JobOut.last_update_date 9 0 0 100%
backend/app/schemas.py JobOut.last_update_type 14 0 0 100%
backend/app/schemas.py JobOut.days_since_last_update 4 0 0 100%
backend/app/schemas.py JobOut.days_until_deadline 4 0 0 100%
backend/app/schemas.py (no function) 227 0 0 100%
backend/app/utils.py hash_password 1 0 0 100%
backend/app/utils.py verify_password 1 0 0 100%
backend/app/utils.py AppLogger.get_logger 26 4 0 85%
backend/app/utils.py AppLogger.create_service_logger 3 0 0 100%
backend/app/utils.py AppLogger.log_execution_time 3 3 0 0%
backend/app/utils.py AppLogger.log_stats 11 11 0 0%
backend/app/utils.py get_gmail_logger 1 0 0 100%
backend/app/utils.py get_job_scraper_logger 1 1 0 0%
backend/app/utils.py get_scheduler_logger 1 1 0 0%
backend/app/utils.py get_api_logger 1 1 0 0%
backend/app/utils.py get_database_logger 1 1 0 0%
backend/app/utils.py get_auth_logger 1 1 0 0%
backend/app/utils.py (no function) 24 0 0 100%
backend/tests/__init__.py (no function) 0 0 0 100%
backend/tests/conftest.py session 5 0 0 100%
backend/tests/conftest.py client 4 0 0 100%
backend/tests/conftest.py client.override_get_db 3 0 0 100%
backend/tests/conftest.py test_users 1 0 0 100%
backend/tests/conftest.py tokens 1 0 0 100%
backend/tests/conftest.py authorised_clients 6 0 0 100%
backend/tests/conftest.py test_keywords 1 0 0 100%
backend/tests/conftest.py test_aggregators 1 0 0 100%
backend/tests/conftest.py test_locations 1 0 0 100%
backend/tests/conftest.py test_companies 1 0 0 100%
backend/tests/conftest.py test_persons 1 0 0 100%
backend/tests/conftest.py test_files 1 0 0 100%
backend/tests/conftest.py test_jobs 1 0 0 100%
backend/tests/conftest.py test_interviews 1 0 0 100%
backend/tests/conftest.py test_job_alert_emails 1 0 0 100%
backend/tests/conftest.py test_scraped_jobs 1 0 0 100%
backend/tests/conftest.py test_service_logs 1 0 0 100%
backend/tests/conftest.py test_job_application_updates 1 0 0 100%
backend/tests/conftest.py test_settings 1 0 0 100%
backend/tests/conftest.py open_file 4 0 0 100%
backend/tests/conftest.py CRUDTestBase.check_output 29 18 0 38%
backend/tests/conftest.py CRUDTestBase.get_all 1 0 0 100%
backend/tests/conftest.py CRUDTestBase.get_one 1 0 0 100%
backend/tests/conftest.py CRUDTestBase.post 1 0 0 100%
backend/tests/conftest.py CRUDTestBase.put 1 0 0 100%
backend/tests/conftest.py CRUDTestBase.delete 1 0 0 100%
backend/tests/conftest.py CRUDTestBase.setup_method 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_all_success 4 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_all_unauthorized 2 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_one_success 4 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_one_unauthorized 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_one_other_user 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_get_one_non_exist 2 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_post_success 5 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_post_unauthorized 2 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_put_success 4 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_put_empty_body 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_put_non_exist 2 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_put_unauthorized 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_put_other_user 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_delete_success 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_delete_non_exist 2 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_delete_unauthorized 3 0 0 100%
backend/tests/conftest.py CRUDTestBase.test_delete_other_user 3 0 0 100%
backend/tests/conftest.py (no function) 87 0 0 100%
backend/tests/eis/__init__.py (no function) 0 0 0 100%
backend/tests/eis/test_email_scraper.py create_gmail_scraper 13 0 0 100%
backend/tests/eis/test_email_scraper.py mock_get_indeed_redirected_url 2 0 0 100%
backend/tests/eis/test_email_scraper.py patch_get_indeed_redirected_url 2 0 0 100%
backend/tests/eis/test_email_scraper.py gmail_scraper 1 0 0 100%
backend/tests/eis/test_email_scraper.py gmail_scraper_with_brightapi_skip 1 0 0 100%
backend/tests/eis/test_email_scraper.py create_email_data 2 0 0 100%
backend/tests/eis/test_email_scraper.py linkedin_email_data 1 0 0 100%
backend/tests/eis/test_email_scraper.py linkedin_email_data_user2 1 0 0 100%
backend/tests/eis/test_email_scraper.py indeed_email_data 1 0 0 100%
backend/tests/eis/test_email_scraper.py indeed_email_data_user2 1 0 0 100%
backend/tests/eis/test_email_scraper.py create_email_record 5 0 0 100%
backend/tests/eis/test_email_scraper.py linkedin_email_record 1 0 0 100%
backend/tests/eis/test_email_scraper.py linkedin_email_record_user2 1 0 0 100%
backend/tests/eis/test_email_scraper.py indeed_email_record 1 0 0 100%
backend/tests/eis/test_email_scraper.py indeed_email_record_user2 1 0 0 100%
backend/tests/eis/test_email_scraper.py TestCleanEmailAddress.test_clean_email_address 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestGetUserIdFromEmail.test_get_user_id_existing_user 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestGetUserIdFromEmail.test_get_user_id_non_existing_user 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestGetUserIdFromEmail.test_get_user_id_empty_email 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestGetUserIdFromEmail.test_get_user_id_case_sensitivity 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveEmailToDb.test_save_new_email_success 13 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveEmailToDb.test_save_existing_email_returns_existing 9 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_real_email 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_empty_body 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_no_jobs 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_url_variations 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_with_duplicate_ids 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_with_query_parameters 5 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractLinkedinJobIds.test_extract_linkedin_job_ids_malformed_urls 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_real_email 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_empty_body 2 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_no_jobs 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_url_variations 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_with_duplicate_ids 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestExtractIndeedJobIds.test_extract_indeed_job_ids_malformed_urls 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobsToDb.test_save_new_jobs_success 7 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobsToDb.test_save_existing_jobs_returns_existing 7 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobsToDb.test_save_jobs_different_owners 13 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobDataToDb.sample_job_data 1 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobDataToDb.sample_scraped_job 5 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobDataToDb.test_save_job_data_single_job_and_data 13 0 0 100%
backend/tests/eis/test_email_scraper.py TestSaveJobDataToDb.test_save_job_data_multiple_jobs_and_data 21 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessEmailJobs.test_process_linkedin_email_jobs_success 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessEmailJobs.test_process_indeed_email_jobs_success 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessEmailJobs.test_process_indeed_email_jobs_success_no_brightapi 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessEmailJobs.test_process_linkedin_email_jobs_success_duplicates_different_owners 6 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessEmailJobs.test_process_linkedin_email_jobs_success_duplicates_same_owner 4 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_single_user 18 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_single_user.mock_get_email_ids_side_effect 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_single_user.mock_get_email_data_side_effect 3 1 0 67%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users 19 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users.mock_get_email_ids_side_effect 5 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users.mock_get_email_data_side_effect 5 1 0 80%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users_same_jobs 19 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users_same_jobs.mock_get_email_ids_side_effect 5 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_multiple_users_same_jobs.mock_get_email_data_side_effect 5 1 0 80%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_skip_brightdata 7 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_skip_brightdata.mock_get_email_ids_side_effect 3 0 0 100%
backend/tests/eis/test_email_scraper.py TestProcessUserEmails.test_skip_brightdata.mock_get_email_data_side_effect 3 1 0 67%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs._scraped_jobs 9 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.indeed_scraped_jobs 1 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.indeed_scraped_jobs_user2 1 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.linkedin_scraped_jobs 1 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.test_indeed_success 8 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.test_indeed_nobrightapi_success 14 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.test_indeed_nobrightapi_fail 8 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.test_linkedin_success 8 0 0 100%
backend/tests/eis/test_email_scraper.py TestScrapeRemainingJobs.test_indeed_multiple_users_shared_jobs_success 14 0 0 100%
backend/tests/eis/test_email_scraper.py (no function) 101 0 0 100%
backend/tests/eis/test_job_scraper.py test_extract_indeed_jobs_from_email 2 0 0 100%
backend/tests/eis/test_job_scraper.py test_parse_indeed_job_section 2 0 0 100%
backend/tests/eis/test_job_scraper.py MockLinkedinJobScraper.__init__ 2 0 0 100%
backend/tests/eis/test_job_scraper.py MockLinkedinJobScraper.scrape_job 5 0 0 100%
backend/tests/eis/test_job_scraper.py MockIndeedJobScraper.__init__ 2 0 0 100%
backend/tests/eis/test_job_scraper.py MockIndeedJobScraper.scrape_job 5 0 0 100%
backend/tests/eis/test_job_scraper.py (no function) 22 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.parser 1 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_uk 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_us 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_canada 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_general 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_letter_number_combinations_parametrized 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_postcode_none_cases 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_attendance_type_remote 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_attendance_type_hybrid 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_attendance_type_onsite 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_attendance_type_none_cases 2 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_extract_attendance_type_case_insensitive 6 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parse_location_parametrized 3 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser._assert_location_result 4 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parse_location_only_method 5 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parser_handles_empty_string 6 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parser_handles_whitespace_only 6 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parser_handles_special_characters 3 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_parser_performance 7 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_complex_location_strings 10 0 0 100%
backend/tests/eis/test_location_parser.py TestLocationParser.test_edge_cases 10 0 0 100%
backend/tests/eis/test_location_parser.py (no function) 40 0 0 100%
backend/tests/eis/test_routers.py (no function) 18 0 0 100%
backend/tests/routers/__init__.py (no function) 0 0 0 100%
backend/tests/routers/test_dashboard.py TestDashboardRouter.test_success 15 0 0 100%
backend/tests/routers/test_dashboard.py TestDashboardRouter.test_unauthorized 2 0 0 100%
backend/tests/routers/test_dashboard.py (no function) 5 0 0 100%
backend/tests/routers/test_data_tables.py TestCompanyCRUD.test_get_all_specific_company 5 0 0 100%
backend/tests/routers/test_data_tables.py TestCompanyCRUD.test_get_all_specific_id_not_owned 3 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_data_url_format 5 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_plain_base64_format 5 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_binary_content 7 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_not_found 4 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_unauthorized 5 0 0 100%
backend/tests/routers/test_data_tables.py TestFileCRUD.test_file_download_empty_content 6 0 0 100%
backend/tests/routers/test_data_tables.py (no function) 78 0 0 100%
backend/tests/routers/test_export.py TestExport.test_export_data 2 0 0 100%
backend/tests/routers/test_export.py TestExport.test_export_no_data 3 0 0 100%
backend/tests/routers/test_export.py (no function) 3 0 0 100%
backend/tests/routers/test_login.py TestLogin.test_login_user 8 0 0 100%
backend/tests/routers/test_login.py TestLogin.test_incorrect_login 2 0 0 100%
backend/tests/routers/test_login.py (no function) 8 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_all_users_admin 3 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_all_users_non_admin 2 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_all_users_unauthorised 2 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_current_user_profile_success 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_user_by_id 3 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_user_by_id_non_admin 2 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_user_by_id_unauthorised 2 0 0 100%
backend/tests/routers/test_user.py TestUser.test_get_user_by_id_not_found 2 0 0 100%
backend/tests/routers/test_user.py TestUser.get_user 1 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_same_user_admin 5 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_admin 5 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_admin_existing 3 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_admin_incorrect 3 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_same_user_non_admin 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_non_admin 5 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_me_user_non_admin 5 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_nopassword_user_non_admin 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_non_admin_existing 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_different_user_non_admin_incorrect 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_user_noemail 4 0 0 100%
backend/tests/routers/test_user.py TestUser.test_update_user_unauthorised 6 0 0 100%
backend/tests/routers/test_user.py TestUser.test_create_user 5 0 0 100%
backend/tests/routers/test_user.py TestUser.test_create_user_limited 3 0 0 100%
backend/tests/routers/test_user.py (no function) 27 0 0 100%
backend/tests/test_utils.py TestPasswordUtils.test_hash_is_not_plaintext 4 0 0 100%
backend/tests/test_utils.py TestPasswordUtils.test_correct_password_verifies 3 0 0 100%
backend/tests/test_utils.py TestPasswordUtils.test_incorrect_password_fails 4 0 0 100%
backend/tests/test_utils.py TestPasswordUtils.test_hash_is_unique_due_to_salt 6 0 0 100%
backend/tests/test_utils.py (no function) 6 0 0 100%
backend/tests/utils/__init__.py (no function) 0 0 0 100%
backend/tests/utils/create_data.py create_settings 5 0 0 100%
backend/tests/utils/create_data.py create_users 18 0 0 100%
backend/tests/utils/create_data.py delete_user 4 4 0 0%
backend/tests/utils/create_data.py override_entries_properties 13 3 0 77%
backend/tests/utils/create_data.py add_to_db 5 0 0 100%
backend/tests/utils/create_data.py create_keywords 3 0 0 100%
backend/tests/utils/create_data.py create_aggregators 3 0 0 100%
backend/tests/utils/create_data.py create_companies 3 0 0 100%
backend/tests/utils/create_data.py create_locations 3 0 0 100%
backend/tests/utils/create_data.py create_people 3 0 0 100%
backend/tests/utils/create_data.py create_jobs 5 0 0 100%
backend/tests/utils/create_data.py create_files 3 0 0 100%
backend/tests/utils/create_data.py create_interviews 4 0 0 100%
backend/tests/utils/create_data.py create_job_application_updates 3 0 0 100%
backend/tests/utils/create_data.py create_job_alert_emails 5 0 0 100%
backend/tests/utils/create_data.py create_scraped_jobs 4 0 0 100%
backend/tests/utils/create_data.py create_service_logs 3 0 0 100%
backend/tests/utils/create_data.py (no function) 22 0 0 100%
backend/tests/utils/files.py get_resources_path 2 0 0 100%
backend/tests/utils/files.py load_file_as_base64 9 3 0 67%
backend/tests/utils/files.py get_file_info 15 7 0 53%
backend/tests/utils/files.py load_all_resource_files 13 1 0 92%
backend/tests/utils/files.py (no function) 7 0 0 100%
backend/tests/utils/seed_database.py reset_database 9 0 0 100%
backend/tests/utils/seed_database.py seed_database 3 3 0 0%
backend/tests/utils/seed_database.py (no function) 10 1 0 90%
backend/tests/utils/table_data.py add_mappings 6 0 0 100%
backend/tests/utils/table_data.py (no function) 43 0 0 100%
Total   3031 394 0 87%

No items found using the specified filter.