import { WebCrawler } from "../crawler";

describe("WebCrawler - noSections", () => {
  let crawler: WebCrawler;

  beforeEach(() => {
    crawler = new WebCrawler({
      jobId: "test-job",
      initialUrl: "https://example.com",
      baseUrl: "https://example.com",
      includes: [],
      excludes: [],
    });
  });

  describe("noSections method", () => {
    it("should return true for URLs without hash fragments", () => {
      expect(crawler["noSections"]("https://example.com/page")).toBe(true);
      expect(crawler["noSections"]("https://example.com/blog/post")).toBe(true);
      expect(crawler["noSections"]("https://example.com")).toBe(true);
    });

    it("should return false for simple anchor links", () => {
      expect(crawler["noSections"]("https://example.com/page#section")).toBe(
        false,
      );
      expect(crawler["noSections"]("https://example.com/page#top")).toBe(false);
      expect(crawler["noSections"]("https://example.com/page#")).toBe(false);
      expect(crawler["noSections"]("https://example.com/page#a")).toBe(false);
    });

    it("should return true for hash fragments that look like routes", () => {
      expect(crawler["noSections"]("https://example.com/app#/dashboard")).toBe(
        true,
      );
      expect(
        crawler["noSections"]("https://example.com/spa#/user/profile"),
      ).toBe(true);
      expect(
        crawler["noSections"]("https://example.com/page#/settings/account"),
      ).toBe(true);
    });

    it("should return false for short hash fragments even with slashes", () => {
      expect(crawler["noSections"]("https://example.com/page#/")).toBe(false);
    });

    it("should handle edge cases", () => {
      expect(crawler["noSections"]("https://example.com/page#ab")).toBe(false);
      expect(crawler["noSections"]("https://example.com/page#abc/def")).toBe(
        true,
      );
    });
  });
});
