IKHSAN
EN Read in EnglishID

homeio

Publik

Fork dari doctor-io/homeio

Branch
main
Commit terakhir
958d74616 Oktober 2026

update-check.test.ts

Buka raw
import { describe, expect, it } from "vitest";

import {
  compareImageTags,
  extractImageTag,
  isTagUpdateAvailable,
} from "@/lib/server/modules/store/update-check";

describe("update-check (tag-based)", () => {
  describe("extractImageTag", () => {
    it("extracts tag from image with repo prefix", () => {
      expect(extractImageTag("plexinc/pms-docker:1.41.3")).toBe("1.41.3");
    });

    it("extracts tag from simple image", () => {
      expect(extractImageTag("nginx:1.25.3")).toBe("1.25.3");
    });

    it("returns null for image with no tag", () => {
      expect(extractImageTag("nginx")).toBeNull();
    });

    it("returns null for null/undefined input", () => {
      expect(extractImageTag(null)).toBeNull();
      expect(extractImageTag(undefined)).toBeNull();
    });
  });

  describe("compareImageTags", () => {
    it("returns positive when a is greater", () => {
      expect(compareImageTags("1.41.3", "1.41.2")).toBeGreaterThan(0);
      expect(compareImageTags("2026.3.0", "2025.2.1")).toBeGreaterThan(0);
    });

    it("returns negative when a is less", () => {
      expect(compareImageTags("1.41.2", "1.41.3")).toBeLessThan(0);
      expect(compareImageTags("2025.2.1", "2026.3.0")).toBeLessThan(0);
    });

    it("returns 0 when equal", () => {
      expect(compareImageTags("1.41.2", "1.41.2")).toBe(0);
    });

    it("compares by major version first", () => {
      expect(compareImageTags("2.0.0", "1.99.99")).toBeGreaterThan(0);
    });
  });

  describe("isTagUpdateAvailable", () => {
    it("returns true when catalog tag is strictly newer", () => {
      expect(isTagUpdateAvailable("plexinc/pms-docker:1.41.2", "plexinc/pms-docker:1.41.3")).toBe(true);
      expect(isTagUpdateAvailable("wisdomsky/cloudflared-web:2025.2.1", "wisdomsky/cloudflared-web:2026.3.0")).toBe(true);
    });

    it("returns false when catalog tag is older than installed", () => {
      // Catalog lags behind installed — should NOT show as update
      expect(isTagUpdateAvailable("wisdomsky/cloudflared-web:2026.3.0", "wisdomsky/cloudflared-web:2025.2.1")).toBe(false);
    });

    it("returns false when tags are equal", () => {
      expect(isTagUpdateAvailable("nginx:1.25.3", "nginx:1.25.3")).toBe(false);
    });

    it("returns false when either image is null", () => {
      expect(isTagUpdateAvailable(null, "nginx:1.25.3")).toBe(false);
      expect(isTagUpdateAvailable("nginx:1.25.3", null)).toBe(false);
      expect(isTagUpdateAvailable(null, null)).toBe(false);
    });

    it("returns false when images have no tags", () => {
      expect(isTagUpdateAvailable("nginx", "nginx")).toBe(false);
    });
  });
});
byte
2.662
baris
75
Jenis
ts
Commit terakhir
16 Oktober 2026