package oltp
import "testing"
// An account whose only token resolves to no push letter has no push
// credential, but its token still proves it: LetterlessSecrets answers
// that token's secret so a card signed with it can be told what is
// missing. A name that is not an account, and a disabled account, have
// nothing to answer.
func TestLetterlessSecretsAreTheTokensThatSignNoPush(t *testing.T) {
db := tokenDB(t, "sandbox")
if err := db.AddAccount("pat", "irrelevant to pushing", false); err != nil {
t.Fatal(err)
}
if err := db.Grant("pat", "sandbox", Read); err != nil {
t.Fatal(err)
}
if _, err := db.MintSyncToken("pat"); err != nil {
t.Fatal(err)
}
if got := db.Secrets("sandbox", "pat"); len(got) != 0 {
t.Fatalf("FAIL: a reader's token signs a push: %+v", got)
}
got := db.LetterlessSecrets("sandbox", "pat")
if len(got) != 1 || got[0].CheckIn || got[0].Publish || got[0].Secret == "" {
t.Fatalf("FAIL: the reader's token is not offered as letterless: %+v", got)
}
if got := db.LetterlessSecrets("sandbox", "nobody-here"); len(got) != 0 {
t.Errorf("FAIL: an unknown name has credentials: %+v", got)
}
// An account that may push has its token in Secrets, not here.
writerWithToken(t, db, "jan", "sandbox")
if got := db.LetterlessSecrets("sandbox", "jan"); len(got) != 0 {
t.Errorf("FAIL: a pushing token is offered as letterless: %+v", got)
}
if err := db.SetDisabled("pat", true); err != nil {
t.Fatal(err)
}
if got := db.LetterlessSecrets("sandbox", "pat"); len(got) != 0 {
t.Errorf("FAIL: a disabled account has credentials: %+v", got)
}
t.Log("ok")
}