package area import ( "context" "testing" "yovision.local/sense/app/sense/admission" "yovision.local/sense/app/sense/identity" ) func TestVersionsConflictAndRecalibration(t *testing.T) { service := NewService(NewMemoryStore()) width := 1920 service.profile = func(string, string) (admission.Profile, error) { return admission.Profile{Width: width, Height: 1080}, nil } item, err := service.Create(context.Background(), identity.Principal{}, "device", "main", "区域", KindPolygon, "", []Point{{.1, .1}, {.9, .1}, {.5, .8}}) if err != nil { t.Fatal(err) } updated, err := service.Update(context.Background(), identity.Principal{}, item.ID, "区域2", "", item.Points, item.Version, false) if err != nil || updated.Version != 2 { t.Fatalf("updated=%#v err=%v", updated, err) } if _, err := service.Update(context.Background(), identity.Principal{}, item.ID, "冲突", "", item.Points, item.Version, false); err != ErrConflict { t.Fatalf("conflict err=%v", err) } width = 1280 flagged, err := service.Update(context.Background(), identity.Principal{}, item.ID, updated.Name, "", updated.Points, updated.Version, false) if err != nil || !flagged.RecalibrationRequired { t.Fatalf("flagged=%#v err=%v", flagged, err) } recalibrated, err := service.Update(context.Background(), identity.Principal{}, item.ID, updated.Name, "", updated.Points, flagged.Version, true) if err != nil || recalibrated.RecalibrationRequired || recalibrated.Width != 1280 { t.Fatalf("recalibrated=%#v err=%v", recalibrated, err) } }