package business import ( "context" "testing" ) type otherSettingsFake struct { value *OtherSettings calls int } func (r *otherSettingsFake) Find(context.Context) (*OtherSettings, error) { r.calls++ return r.value, nil } func (r *otherSettingsFake) Save(_ context.Context, value OtherSettings) (*OtherSettings, error) { r.calls++ r.value = &value return r.value, nil } func TestOtherSettingsOnlySuperAdminAndDefaults(t *testing.T) { r := &otherSettingsFake{} uc := NewOtherSettingsUsecase(r, nil) for _, ctx := range []context.Context{context.Background(), accountContext(7, 901), accountContext(8, 902), accountContext(9, 903)} { if _, err := uc.Get(ctx); err == nil { t.Fatal("非超管不能读取设置") } if _, err := uc.Save(ctx, DefaultOtherSettings()); err == nil { t.Fatal("非超管不能保存设置") } } if r.calls != 0 { t.Fatal("无权限请求不得访问存储") } value, err := uc.Get(accountContext(1, 888)) if err != nil || *value != DefaultOtherSettings() { t.Fatalf("首次读取应返回默认值: %+v %v", value, err) } if _, err := uc.Save(accountContext(1, 888), OtherSettings{Amount: 0, Days: 1}); err != nil { t.Fatal(err) } value, err = uc.Get(accountContext(2, 888)) if err != nil || value.Amount != 0 || value.Days != 1 { t.Fatal("参数应为全站共享,不能按用户各存一份") } } func TestOtherSettingsRejectInvalidRange(t *testing.T) { uc := NewOtherSettingsUsecase(&otherSettingsFake{}, nil) for _, value := range []OtherSettings{{Amount: -1, Days: 30}, {Amount: 3000, Days: 0}, {Amount: MaxSettingsInteger + 1, Days: 30}, {Amount: 3000, Days: MaxSettingsInteger + 1}} { if _, err := uc.Save(accountContext(1, 888), value); err != ErrOtherSettingsInput { t.Fatalf("不应保存非法值: %+v %v", value, err) } } }