Coverage report: 70%

Files Functions Classes

coverage.py v7.9.1, created at 2025-06-27 22:07 +0000

File function statements missing excluded coverage
app.py (no function) 5 5 0 0%
tests/__init__.py (no function) 0 0 0 100%
tests/interfaces/__init__.py (no function) 0 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.setUp 6 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.tearDown 1 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.test_get_interfaces 17 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.test_single_interface_success 6 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.test_single_interface_draft_redirect 6 0 0 100%
tests/interfaces/test_interface_routes.py TestIntegrationRoutes.test_single_interface_not_found 5 0 0 100%
tests/interfaces/test_interface_routes.py (no function) 16 0 0 100%
tests/interfaces/test_single_interface.py TestSingleInterface.setUp 7 0 0 100%
tests/interfaces/test_single_interface.py TestSingleInterface.test_single_interface 6 0 0 100%
tests/interfaces/test_single_interface.py TestSingleInterface.test_repo_has_no_interface 6 0 0 100%
tests/interfaces/test_single_interface.py (no function) 13 0 0 100%
tests/login/__init__.py (no function) 0 0 0 100%
tests/login/test_login.py TestLoginViews.setUp 5 0 0 100%
tests/login/test_login.py TestLoginViews.test_login 4 0 0 100%
tests/login/test_login.py TestLoginViews.test_login_next 4 0 0 100%
tests/login/test_login.py TestLoginViews.test_login_api_500 4 0 0 100%
tests/login/test_login.py TestLoginViews.test_logout 6 0 0 100%
tests/login/test_login.py (no function) 15 0 0 100%
tests/mock_data/mock_publisher_logic.py (no function) 7 0 0 100%
tests/mock_data/mock_store_logic.py (no function) 6 0 0 100%
tests/mock_data/search_mock.py (no function) 5 0 0 100%
tests/publisher/__init__.py (no function) 0 0 0 100%
tests/publisher/test_publisher_logic.py TestProcessReleases.setUp 3 0 0 100%
tests/publisher/test_publisher_logic.py TestProcessReleases.test_process_releases_empty_inputs 2 0 0 100%
tests/publisher/test_publisher_logic.py TestProcessReleases.test_process_releases_single_channel_single_revision 3 0 0 100%
tests/publisher/test_publisher_logic.py TestProcessReleases.test_process_releases_multiple_channels_revisions 3 0 0 100%
tests/publisher/test_publisher_logic.py TestGetAllArchitectures.test_get_all_architectures 4 0 0 100%
tests/publisher/test_publisher_logic.py (no function) 11 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.setUp 6 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.set_session 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_account_details_no_login 5 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_account_details 5 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_publisher 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_package 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_update_package 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_update_package_failure 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_update_package_unauthorized 5 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_list_page 10 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_accept_invite 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_accept_post_invite 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_accept_post_invite_failed 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_reject_post_invite 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_collaborators 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_collaborators_failed 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_pending_invites 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_invite_collaborators 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_revoke_invite 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_register_name 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_post_register_name 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_post_register_name_already_owned 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_register_name_dispute 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_register_name_dispute_redirect 2 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_register_name_dispute_thank_you_redirect 2 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_register_name_dispute_thank_you 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_delete_package 3 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_delete_package_failed 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_post_create_track 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_post_create_track_already_exists 4 0 0 100%
tests/publisher/test_publisher_views.py TestPublisherViews.test_get_releases 6 0 0 100%
tests/publisher/test_publisher_views.py (no function) 62 0 0 100%
tests/store/__init__.py (no function) 0 0 0 100%
tests/store/test_get_packages.py TestGetPackages.setUp 2 0 0 100%
tests/store/test_get_packages.py TestGetPackages.test_get_packages 3 0 0 100%
tests/store/test_get_packages.py TestGetPackages.test_get_packages_with_query 4 0 0 100%
tests/store/test_get_packages.py TestGetPackages.test_get_packages_with_provides_and_requires 6 0 0 100%
tests/store/test_get_packages.py TestGetPackages.test_get_packages_error_handling 6 1 0 83%
tests/store/test_get_packages.py TestGetPackages.test_get_packages_empty_response 5 0 0 100%
tests/store/test_get_packages.py (no function) 12 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails.setUp 2 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails.test_get_publisher_details 6 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails.test_get_publisher_details_empty_response 6 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails.test_get_publisher_details_exception 5 2 0 60%
tests/store/test_get_publisher_details.py TestGetPublisherDetails._assert_heading_section 5 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails._assert_content_section 6 0 0 100%
tests/store/test_get_publisher_details.py TestGetPublisherDetails._assert_card 6 0 0 100%
tests/store/test_get_publisher_details.py (no function) 16 0 0 100%
tests/store/test_store_logic.py TestConvertChannelMaps.test_convert_channel_map 2 0 0 100%
tests/store/test_store_logic.py TestAddStoreFront.test_add_store_front_data 6 0 0 100%
tests/store/test_store_logic.py TestGetBannerUrl.test_banner_url_in_media 3 0 0 100%
tests/store/test_store_logic.py TestGetBannerUrl.test_banner_url_not_in_media 3 0 0 100%
tests/store/test_store_logic.py TestGetBannerUrl.test_empty_media_list 3 0 0 100%
tests/store/test_store_logic.py TestExtractSeries.test_extract_series_short_name 3 0 0 100%
tests/store/test_store_logic.py TestExtractSeries.test_extract_series_long_name 3 0 0 100%
tests/store/test_store_logic.py TestExtractSeries.test_extract_series_duplicate_bases 3 0 0 100%
tests/store/test_store_logic.py TestExtractBases.test_extract_bases 3 0 0 100%
tests/store/test_store_logic.py TestExtractBases.test_extract_bases_empty_bases 3 0 0 100%
tests/store/test_store_logic.py TestExtractBases.test_extract_bases_duplicate_bases 3 0 0 100%
tests/store/test_store_logic.py TestLibraries.test_process_libraries 1 0 0 100%
tests/store/test_store_logic.py TestLibraries.test_get_library 3 0 0 100%
tests/store/test_store_logic.py TestFormatslug.test_format_slug 8 0 0 100%
tests/store/test_store_logic.py TestProcessRevision.test_process_revision 3 0 0 100%
tests/store/test_store_logic.py (no function) 26 0 0 100%
tests/test_context.py TestContextFunctions.test_schedule_banner 2 0 0 100%
tests/test_context.py (no function) 4 0 0 100%
tests/test_decorators.py TestDecorators.setUp 2 0 0 100%
tests/test_decorators.py TestDecorators.tearDown 1 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_random_url 8 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_random_url.test_func 1 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_localhost 6 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_localhost.test_func 1 1 0 0%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_staging 6 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_staging.test_func 1 1 0 0%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_production 6 0 0 100%
tests/test_decorators.py TestDecorators.test_redirect_uppercase_to_lowercase_production.test_func 1 1 0 0%
tests/test_decorators.py (no function) 10 0 0 100%
tests/test_param_redirect.py MockCookies.__init__ 1 0 0 100%
tests/test_param_redirect.py MockCookies.set_cookie 1 0 0 100%
tests/test_param_redirect.py MockCookies.get 1 0 0 100%
tests/test_param_redirect.py MockRequest.__init__ 3 0 0 100%
tests/test_param_redirect.py TestParamRedirect.setUp 1 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_capture_matches 5 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_capture_matches_order 5 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_capture_matches_args 5 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_capture_does_not_match 4 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_exec 5 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_exec_no_match_path 6 0 0 100%
tests/test_param_redirect.py TestParamRedirect.test_param_redirect_exec_no_cookie 6 0 0 100%
tests/test_param_redirect.py (no function) 22 1 0 95%
tests/test_routes.py TestRoutes.setUp 2 0 0 100%
tests/test_routes.py TestRoutes.test_homepage 1 0 0 100%
tests/test_routes.py (no function) 7 1 0 86%
tests/test_search.py TestSearchPackage.setUp 4 0 0 100%
tests/test_search.py TestSearchPackage.test_all_charms 9 0 0 100%
tests/test_search.py TestSearchPackage.test_all_bundles 9 0 0 100%
tests/test_search.py TestAllSearchView.setUp 1 0 0 100%
tests/test_search.py TestAllSearchView.test_search 21 0 0 100%
tests/test_search.py TestAllSearchView.test_search_with_single_type 7 0 0 100%
tests/test_search.py (no function) 20 0 0 100%
webapp/__init__.py (no function) 0 0 0 100%
webapp/app.py request_hook 2 1 0 50%
webapp/app.py get_account_json 7 7 0 0%
webapp/app.py contact_us 1 1 0 0%
webapp/app.py thank_you 1 1 0 0%
webapp/app.py icon_validator 1 1 0 0%
webapp/app.py site_map 4 4 0 0%
webapp/app.py site_map_links 5 5 0 0%
webapp/app.py site_map_operators 7 7 0 0%
webapp/app.py (no function) 56 0 0 100%
webapp/authentication.py is_authenticated 1 0 0 100%
webapp/authentication.py empty_session 3 0 0 100%
webapp/authentication.py (no function) 2 0 0 100%
webapp/config.py (no function) 6 0 0 100%
webapp/decorators.py cached_redirect 3 0 0 100%
webapp/decorators.py cached_redirect.param_redirect 4 1 0 75%
webapp/decorators.py login_required 3 0 0 100%
webapp/decorators.py login_required.is_user_logged_in 5 0 0 100%
webapp/decorators.py store_maintenance 3 0 0 100%
webapp/decorators.py store_maintenance.is_store_in_maintenance 3 3 0 0%
webapp/decorators.py redirect_uppercase_to_lowercase 3 0 0 100%
webapp/decorators.py redirect_uppercase_to_lowercase.is_uppercase 8 0 0 100%
webapp/decorators.py (no function) 10 0 0 100%
webapp/extensions.py (no function) 2 0 0 100%
webapp/handlers.py charmhub_utility_processor 4 0 0 100%
webapp/handlers.py set_handlers 14 0 0 100%
webapp/handlers.py set_handlers.utility_processor 1 0 0 100%
webapp/handlers.py set_handlers.handle_store_api_timeout 2 2 0 0%
webapp/handlers.py set_handlers.handle_store_api_circuit_breaker_exception 1 1 0 0%
webapp/handlers.py set_handlers.handle_store_api_error_list 7 7 0 0%
webapp/handlers.py set_handlers.handle_store_api_error 2 0 0 100%
webapp/handlers.py set_handlers.add_headers 7 0 0 100%
webapp/handlers.py (no function) 9 0 0 100%
webapp/helpers.py get_yaml_loader 3 1 0 67%
webapp/helpers.py is_safe_url 1 0 0 100%
webapp/helpers.py get_soup 2 0 0 100%
webapp/helpers.py decrease_header 5 5 0 0%
webapp/helpers.py add_header_id 20 20 0 0%
webapp/helpers.py modify_headers 5 5 0 0%
webapp/helpers.py schedule_banner 7 2 0 71%
webapp/helpers.py markdown_to_html 2 2 0 0%
webapp/helpers.py param_redirect_capture 10 0 0 100%
webapp/helpers.py param_redirect_exec 11 0 0 100%
webapp/helpers.py get_csp_as_str 5 0 0 100%
webapp/helpers.py (no function) 25 0 0 100%
webapp/integrations/logic.py Interfaces.__init__ 1 0 0 100%
webapp/integrations/logic.py Interfaces.get_interfaces 26 26 0 0%
webapp/integrations/logic.py Interfaces.repo_has_interface 5 1 0 80%
webapp/integrations/logic.py Interfaces.get_interface_from_path 31 31 0 0%
webapp/integrations/logic.py Interfaces.get_h_content 2 2 0 0%
webapp/integrations/logic.py Interfaces.extract_headings_and_content 14 14 0 0%
webapp/integrations/logic.py Interfaces.parse_text 14 14 0 0%
webapp/integrations/logic.py Interfaces.convert_readme 26 26 0 0%
webapp/integrations/logic.py Interfaces.get_interface_name_from_readme 2 2 0 0%
webapp/integrations/logic.py (no function) 31 0 0 100%
webapp/integrations/views.py get_interfaces 3 0 0 100%
webapp/integrations/views.py interfaces_json 1 0 0 100%
webapp/integrations/views.py all_interfaces 5 5 0 0%
webapp/integrations/views.py single_interface 12 1 0 92%
webapp/integrations/views.py get_single_interface 21 14 0 33%
webapp/integrations/views.py (no function) 27 0 0 100%
webapp/login/views.py logout 2 0 0 100%
webapp/login/views.py publisher_login 9 1 0 89%
webapp/login/views.py login_callback 9 9 0 0%
webapp/login/views.py (no function) 23 0 0 100%
webapp/observability/utils.py trace_function 3 0 0 100%
webapp/observability/utils.py trace_function.wrapper 2 0 0 100%
webapp/observability/utils.py start_span 1 1 0 0%
webapp/observability/utils.py (no function) 5 0 0 100%
webapp/packages/__init__.py (no function) 0 0 0 100%
webapp/packages/logic.py get_icon 4 0 0 100%
webapp/packages/logic.py fetch_packages 32 32 0 0%
webapp/packages/logic.py fetch_package 4 4 0 0%
webapp/packages/logic.py get_bundle_charms 9 1 0 89%
webapp/packages/logic.py parse_package_for_card 31 1 0 97%
webapp/packages/logic.py paginate 9 9 0 0%
webapp/packages/logic.py get_packages 12 12 0 0%
webapp/packages/logic.py parse_categories 5 5 0 0%
webapp/packages/logic.py get_store_categories 8 8 0 0%
webapp/packages/logic.py get_package 3 3 0 0%
webapp/packages/logic.py (no function) 30 0 0 100%
webapp/packages/store_packages.py get_store_packages 4 4 0 0%
webapp/packages/store_packages.py package 4 4 0 0%
webapp/packages/store_packages.py get_store_package 3 3 0 0%
webapp/packages/store_packages.py (no function) 17 0 0 100%
webapp/publisher/__init__.py (no function) 0 0 0 100%
webapp/publisher/logic.py process_releases 20 1 0 95%
webapp/publisher/logic.py get_all_architectures 6 0 0 100%
webapp/publisher/logic.py (no function) 15 0 0 100%
webapp/publisher/views.py get_account_details 1 0 0 100%
webapp/publisher/views.py get_publisher 4 0 0 100%
webapp/publisher/views.py get_package 3 0 0 100%
webapp/publisher/views.py update_package 16 0 0 100%
webapp/publisher/views.py list_page 4 0 0 100%
webapp/publisher/views.py accept_invite 1 0 0 100%
webapp/publisher/views.py accept_post_invite 20 3 0 85%
webapp/publisher/views.py reject_post_invite 20 12 0 40%
webapp/publisher/views.py get_collaborators 12 0 0 100%
webapp/publisher/views.py get_pending_invites 12 5 0 58%
webapp/publisher/views.py invite_collaborators 15 8 0 47%
webapp/publisher/views.py revoke_invite 15 8 0 47%
webapp/publisher/views.py register_name 11 0 0 100%
webapp/publisher/views.py post_register_name 23 7 0 70%
webapp/publisher/views.py register_name_dispute 4 0 0 100%
webapp/publisher/views.py register_name_dispute_thank_you 4 0 0 100%
webapp/publisher/views.py delete_package 4 0 0 100%
webapp/publisher/views.py post_create_track 13 3 0 77%
webapp/publisher/views.py get_releases 14 5 0 64%
webapp/publisher/views.py (no function) 87 0 0 100%
webapp/search/logic.py search_discourse 35 2 0 94%
webapp/search/logic.py search_docs 5 0 0 100%
webapp/search/logic.py search_topics 4 0 0 100%
webapp/search/logic.py search_charms 1 0 0 100%
webapp/search/logic.py search_bundles 1 0 0 100%
webapp/search/logic.py (no function) 19 0 0 100%
webapp/search/views.py all_search 1 1 0 0%
webapp/search/views.py all_search_json 7 1 0 86%
webapp/search/views.py all_charms 9 0 0 100%
webapp/search/views.py all_docs 4 0 0 100%
webapp/search/views.py all_topics 8 0 0 100%
webapp/search/views.py (no function) 22 0 0 100%
webapp/store/__init__.py (no function) 0 0 0 100%
webapp/store/logic.py add_description_and_summary 6 6 0 0%
webapp/store/logic.py get_banner_url 4 0 0 100%
webapp/store/logic.py get_channel_map 7 7 0 0%
webapp/store/logic.py convert_channel_maps 33 5 0 85%
webapp/store/logic.py process_revision 7 0 0 100%
webapp/store/logic.py extract_resources 5 5 0 0%
webapp/store/logic.py extract_default_release_architectures 9 9 0 0%
webapp/store/logic.py extract_all_arch 19 19 0 0%
webapp/store/logic.py extract_series 7 0 0 100%
webapp/store/logic.py extract_bases 17 1 0 94%
webapp/store/logic.py convert_date 5 1 0 80%
webapp/store/logic.py get_icons 2 0 0 100%
webapp/store/logic.py get_docs_topic_id 10 10 0 0%
webapp/store/logic.py convert_categories 6 0 0 100%
webapp/store/logic.py add_store_front_data 36 24 0 33%
webapp/store/logic.py get_bundle_charms 9 9 0 0%
webapp/store/logic.py process_python_docs 4 4 0 0%
webapp/store/logic.py process_libraries 5 0 0 100%
webapp/store/logic.py get_library 4 0 0 100%
webapp/store/logic.py filter_charm 7 7 0 0%
webapp/store/logic.py format_slug 1 0 0 100%
webapp/store/logic.py (no function) 56 0 0 100%
webapp/store/views.py get_publisher_details 12 0 0 100%
webapp/store/views.py get_packages 25 0 0 100%
webapp/store/views.py get_package 10 10 0 0%
webapp/store/views.py details_overview 42 42 0 0%
webapp/store/views.py details_docs 26 26 0 0%
webapp/store/views.py details_configuration 17 17 0 0%
webapp/store/views.py details_actions 4 4 0 0%
webapp/store/views.py details_libraries 7 7 0 0%
webapp/store/views.py details_library 12 12 0 0%
webapp/store/views.py details_library_source_code 9 9 0 0%
webapp/store/views.py download_library 10 10 0 0%
webapp/store/views.py details_integrations 4 4 0 0%
webapp/store/views.py details_integrations_data 8 8 0 0%
webapp/store/views.py add_required_fields 2 2 0 0%
webapp/store/views.py details_resources 6 6 0 0%
webapp/store/views.py details_resource 20 20 0 0%
webapp/store/views.py details_integrate 3 3 0 0%
webapp/store/views.py entity_badge 15 15 0 0%
webapp/store/views.py entity_embedded_card 12 12 0 0%
webapp/store/views.py entity_embedded_interface_card 9 9 0 0%
webapp/store/views.py entity_icon 9 9 0 0%
webapp/store/views.py entity_icon_missing 9 9 0 0%
webapp/store/views.py get_charms_from_bundle 4 4 0 0%
webapp/store/views.py store_index 2 0 0 100%
webapp/store/views.py (no function) 117 0 0 100%
webapp/store_api.py decorate_all_methods 9 0 0 100%
webapp/store_api.py (no function) 10 0 0 100%
webapp/topics/__init__.py (no function) 0 0 0 100%
webapp/topics/views.py TopicParser.parse_topic 5 5 0 0%
webapp/topics/views.py TopicParser._parse_packages 19 19 0 0%
webapp/topics/views.py TopicParser._replace_packages 4 4 0 0%
webapp/topics/views.py topics_json 12 12 0 0%
webapp/topics/views.py all_topics 4 4 0 0%
webapp/topics/views.py topic_page 19 19 0 0%
webapp/topics/views.py (no function) 34 0 0 100%
Total   2659 786 0 70%

No items found using the specified filter.