from govcrawler.fetcher.throttle import HostThrottle


class FakeClock:
    def __init__(self):
        self.t = 1000.0
        self.slept = []

    def now(self):
        return self.t

    def sleep(self, s):
        self.slept.append(s)
        self.t += s


def test_first_call_no_wait():
    c = FakeClock()
    t = HostThrottle(interval_s=5.0, jitter_pct=0.0)
    slept = t.wait("https://a.com/x", sleep=c.sleep, now=c.now)
    assert slept == 0.0


def test_second_call_same_host_waits_at_least_interval():
    c = FakeClock()
    t = HostThrottle(interval_s=5.0, jitter_pct=0.0)
    t.wait("https://a.com/x", sleep=c.sleep, now=c.now)
    c.t += 1.0
    t.wait("https://a.com/y", sleep=c.sleep, now=c.now)
    assert sum(c.slept) >= 4.0


def test_different_host_no_wait():
    c = FakeClock()
    t = HostThrottle(interval_s=5.0, jitter_pct=0.0)
    t.wait("https://a.com/x", sleep=c.sleep, now=c.now)
    slept = t.wait("https://b.com/x", sleep=c.sleep, now=c.now)
    assert slept == 0.0
