package server import ( "net/http" "testing" "cc.tiredsysadmin.keeporg/internal/store" ) func TestDecidePushRequiresIfMatch(t *testing.T) { v := decidePush(3, "", store.StrategyServerWins) if v.Accept || v.Status != http.StatusPreconditionRequired { t.Fatalf("verdict = %+v", v) } } func TestDecidePushAcceptsCurrentVersion(t *testing.T) { for _, m := range []string{`"3"`, "3", ` "3" `} { if v := decidePush(3, m, store.StrategyServerWins); !v.Accept { t.Fatalf("If-Match %q rejected: %+v", m, v) } } } func TestDecidePushRejectsStaleVersion(t *testing.T) { v := decidePush(4, `"3"`, store.StrategyServerWins) if v.Accept || v.Status != http.StatusConflict || v.Code != "conflict" { t.Fatalf("verdict = %+v", v) } } func TestForceOnlyAllowedForClientWins(t *testing.T) { if v := decidePush(4, "*", store.StrategyClientWins); !v.Accept { t.Fatalf("client-wins force rejected: %+v", v) } for _, s := range []store.Strategy{store.StrategyServerWins, store.StrategyManual} { v := decidePush(4, "*", s) if v.Accept || v.Code != "force_not_allowed" { t.Fatalf("force under %s = %+v", s, v) } } } func TestDecidePushRejectsJunkIfMatch(t *testing.T) { v := decidePush(1, `"abc"`, store.StrategyServerWins) if v.Accept || v.Status != http.StatusBadRequest { t.Fatalf("verdict = %+v", v) } }