view connectors/tests/route_test.c @ 281:c57149ad216e default tip

Copilot-Session: f68442b1-fa8f-46a0-9689-81710613bbd4
author MrJuneJune <me@mrjunejune.com>
date Tue, 18 Aug 2026 22:18:15 -0700
parents b3b547563ec7
children
line wrap: on
line source

#include "connectors/connector.h"

#include <assert.h>
#include <stdio.h>
#include <string.h>

static const char *value(Seobeo_Request_Entry *map, const char *key)
{
  Seobeo_Request_Entry *entry = Dowa_HashMap_Get_Ptr(map, (char *)key);
  return entry ? entry->value : NULL;
}

typedef struct {
  boolean required_csrf;
} Test_Auth_Context;

static const char *test_only_auth(
    Seobeo_Request_Entry *request, boolean require_csrf,
    Dowa_Arena *arena, void *opaque)
{
  (void)request;
  (void)arena;
  Test_Auth_Context *context = opaque;
  context->required_csrf = require_csrf;
  return NULL;
}

int main(void)
{
  Dowa_Arena *arena = Dowa_Arena_Create(64 * 1024);
  Test_Auth_Context auth_context = {0};
  Connector_Auth_Adapter test_adapter = {
    .resolve_user = test_only_auth,
    .context = &auth_context
  };
  Connector_Service_Configure(NULL, NULL, test_adapter);
  Seobeo_Router_Init();
  Connector_Service_Register_Routes();

  Seobeo_Request_Entry *request = NULL;
  Seobeo_Route_Handler health = Seobeo_Router_Find_Handler(
      "GET", "/health", &request, arena);
  assert(health);
  Seobeo_Request_Entry *response = health(request, arena);
  assert(!strcmp(value(response, "status"), "200"));

  request = NULL;
  Seobeo_Route_Handler auth_page = Seobeo_Router_Find_Handler(
      "GET", "/auth-test.html", &request, arena);
  assert(auth_page);
  response = auth_page(request, arena);
  assert(!strcmp(value(response, "status"), "200"));
  assert(strstr(value(response, "content-type"), "text/html"));
  assert(strstr(value(response, "body"), "Check Zenbu session"));

  request = NULL;
  Seobeo_Route_Handler ai_tools = Seobeo_Router_Find_Handler(
      "GET", "/v1/ai/tools", &request, arena);
  assert(ai_tools);
  response = ai_tools(request, arena);
  assert(!strcmp(value(response, "status"), "200"));
  assert(strstr(value(response, "body"), "connector.gmail.get"));

  request = NULL;
  Seobeo_Route_Handler oauth_start = Seobeo_Router_Find_Handler(
      "POST", "/v1/oauth/google/start", &request, arena);
  assert(oauth_start);
  response = oauth_start(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);
  request = NULL;
  assert(!Seobeo_Router_Find_Handler(
      "GET", "/v1/oauth/google/start", &request, arena));

  request = NULL;
  Seobeo_Route_Handler auth_session = Seobeo_Router_Find_Handler(
      "GET", "/v1/auth/session", &request, arena);
  assert(auth_session);
  response = auth_session(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(strstr(value(response, "body"), "\"authenticated\":false"));

  request = NULL;
  Seobeo_Route_Handler rejected = Seobeo_Router_Find_Handler(
      "DELETE", "/v1/accounts/google:one/drive/files/file-1",
      &request, arena);
  assert(rejected);
  response = rejected(request, arena);
  assert(!strcmp(value(response, "status"), "403"));
  assert(strstr(value(response, "body"), "operation_not_allowed"));

  request = NULL;
  Seobeo_Route_Handler confirmation = Seobeo_Router_Find_Handler(
      "POST", "/v1/confirmations", &request, arena);
  assert(confirmation);
  response = confirmation(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler get_policy = Seobeo_Router_Find_Handler(
      "GET", "/v1/settings/confirmations/gmail.send", &request, arena);
  assert(get_policy);
  response = get_policy(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(!auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler set_policy = Seobeo_Router_Find_Handler(
      "PUT", "/v1/settings/confirmations/gmail.send", &request, arena);
  assert(set_policy);
  response = set_policy(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(auth_context.required_csrf);

  request = NULL;
  Seobeo_Route_Handler drive_list = Seobeo_Router_Find_Handler(
      "GET", "/v1/accounts/google:one/drive/files", &request, arena);
  assert(drive_list);
  response = drive_list(request, arena);
  assert(!strcmp(value(response, "status"), "401"));
  assert(!auth_context.required_csrf);

  request = NULL;
  assert(Seobeo_Router_Find_Handler(
      "POST", "/v1/accounts/google:one/gmail/send", &request, arena));
  request = NULL;
  assert(Seobeo_Router_Find_Handler(
      "GET",
      "/v1/accounts/google:one/gmail/messages/msg/attachments/attachment",
      &request, arena));
  request = NULL;
  assert(!Seobeo_Router_Find_Handler(
      "POST", "/v1/accounts/google:one/gmail/messages/msg/labels",
      &request, arena));

  Seobeo_Router_Destroy();
  Dowa_Arena_Free(arena);
  printf("route_test: ok\n");
  return 0;
}