#include "models/osint_action_catalog.h" #include static OsintSelectionContext *create_entity_context(const char *type) { EntityRecord *entity = entity_record_new( "11111111-1111-4111-8111-111111111111", type, "example.org", NULL, NULL, 80, "2026-01-01T00:00:00Z", "2026-01-01T00:00:00Z", ENTITY_STATUS_ACTIVE, NULL ); OsintSelectionContext *context = osint_selection_context_new_entity(entity, NULL); entity_record_free(entity); return context; } static void test_domain_actions(void) { OsintActionCatalog *catalog = osint_action_catalog_new_defaults(); OsintSelectionContext *context = create_entity_context("domain_name"); GPtrArray *actions = osint_action_catalog_list_compatible(catalog, context); g_assert_nonnull(actions); g_assert_cmpuint(actions->len, ==, 2U); g_assert_cmpstr(osint_action_get_identifier(g_ptr_array_index(actions, 0)), ==, "selection-preview"); g_assert_true(osint_action_is_available(g_ptr_array_index(actions, 0))); g_assert_false(osint_action_is_available(g_ptr_array_index(actions, 1))); g_assert_cmpstr(osint_action_get_required_tool_identifier( g_ptr_array_index(actions, 1)), ==, "dns.dig"); g_assert_nonnull(osint_action_get_unavailable_reason( g_ptr_array_index(actions, 1))); g_ptr_array_unref(actions); osint_selection_context_free(context); osint_action_catalog_free(catalog); } static void test_non_domain_actions(void) { OsintActionCatalog *catalog = osint_action_catalog_new_defaults(); OsintSelectionContext *context = create_entity_context("person"); GPtrArray *actions = osint_action_catalog_list_compatible(catalog, context); g_assert_cmpuint(actions->len, ==, 1U); g_assert_cmpstr(osint_action_get_identifier(g_ptr_array_index(actions, 0)), ==, "selection-preview"); g_ptr_array_unref(actions); osint_selection_context_free(context); osint_action_catalog_free(catalog); } static void test_social_and_email_actions(void) { OsintActionCatalog *catalog = osint_action_catalog_new_defaults(); OsintSelectionContext *social = create_entity_context("social_account"); OsintSelectionContext *email = create_entity_context("email_address"); OsintSelectionContext *instagram = create_entity_context("instagram_account"); OsintSelectionContext *facebook = create_entity_context("facebook_account"); GPtrArray *actions = osint_action_catalog_list_compatible(catalog, social); GPtrArray *email_actions = osint_action_catalog_list_compatible(catalog, email); GPtrArray *instagram_actions = osint_action_catalog_list_compatible(catalog, instagram); GPtrArray *facebook_actions = osint_action_catalog_list_compatible(catalog, facebook); g_assert_cmpuint(actions->len, ==, 3U); g_assert_cmpuint(email_actions->len, ==, 2U); g_assert_cmpuint(instagram_actions->len, ==, 3U); g_assert_cmpuint(facebook_actions->len, ==, 3U); g_assert_cmpstr(osint_action_get_identifier(g_ptr_array_index(email_actions, 1)), ==, "email-account-holehe"); g_ptr_array_unref(actions); g_ptr_array_unref(email_actions); g_ptr_array_unref(instagram_actions); g_ptr_array_unref(facebook_actions); osint_selection_context_free(social); osint_selection_context_free(email); osint_selection_context_free(instagram); osint_selection_context_free(facebook); osint_action_catalog_free(catalog); } static void test_invalid_arguments(void) { OsintActionCatalog *catalog = osint_action_catalog_new_defaults(); g_assert_null(osint_action_catalog_list_compatible(catalog, NULL)); g_assert_null(osint_action_catalog_list_compatible(NULL, NULL)); osint_action_catalog_free(catalog); osint_action_catalog_free(NULL); } static void test_tool_states(void) { OsintActionCatalog *catalog = osint_action_catalog_new_defaults(); OsintSelectionContext *context = create_entity_context("domain_name"); GPtrArray *actions = NULL; osint_action_catalog_update_tool_state( catalog, "dns.dig", OSINT_ACTION_TOOL_STATE_AVAILABLE, "DiG 9.20" ); actions = osint_action_catalog_list_compatible(catalog, context); g_assert_true(osint_action_is_available(g_ptr_array_index(actions, 1))); g_assert_cmpstr(osint_action_get_tool_version(g_ptr_array_index(actions, 1)), ==, "DiG 9.20"); g_ptr_array_unref(actions); osint_action_catalog_update_tool_state( catalog, "dns.dig", OSINT_ACTION_TOOL_STATE_MISSING, NULL ); actions = osint_action_catalog_list_compatible(catalog, context); g_assert_false(osint_action_is_available(g_ptr_array_index(actions, 1))); g_assert_nonnull(osint_action_get_unavailable_reason( g_ptr_array_index(actions, 1))); g_ptr_array_unref(actions); osint_selection_context_free(context); osint_action_catalog_free(catalog); } int main(int argc, char **argv) { g_test_init(&argc, &argv, NULL); g_test_add_func("/osint-action-catalog/domain", test_domain_actions); g_test_add_func("/osint-action-catalog/non-domain", test_non_domain_actions); g_test_add_func("/osint-action-catalog/social-email", test_social_and_email_actions); g_test_add_func("/osint-action-catalog/invalid", test_invalid_arguments); g_test_add_func("/osint-action-catalog/tool-states", test_tool_states); return g_test_run(); }