mirror of
https://github.com/fiatjaf/nak.git
synced 2026-10-05 15:18:23 +00:00
Merge pull request #219 from mattn/fix/petname-test-api
Fix petname tests for explicit resolver identities
This commit is contained in:
@@ -17,3 +17,7 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
go-version-file: go.mod
|
go-version-file: go.mod
|
||||||
- run: go build .
|
- run: go build .
|
||||||
|
# Existing CLI tests share flag state and include public-relay requests.
|
||||||
|
# Keep this regression suite independent of those tests and Go vet's
|
||||||
|
# pre-existing non-constant-format diagnostics.
|
||||||
|
- run: go test -vet=off . -run 'TestResolvePetname|TestParsePubKey' -count=1
|
||||||
|
|||||||
+14
-22
@@ -41,7 +41,6 @@ func setupPetnameSystem(t *testing.T, lists map[nostr.SecretKey][]sdk.ProfileRef
|
|||||||
|
|
||||||
t.Cleanup(func() {
|
t.Cleanup(func() {
|
||||||
sys = nil
|
sys = nil
|
||||||
rootSec = ""
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -94,9 +93,8 @@ func TestResolvePetnamePathChain(t *testing.T) {
|
|||||||
erin: {{Pubkey: david.Public(), Petname: "david"}},
|
erin: {{Pubkey: david.Public(), Petname: "david"}},
|
||||||
david: {{Pubkey: frank.Public(), Petname: "frank"}},
|
david: {{Pubkey: frank.Public(), Petname: "frank"}},
|
||||||
})
|
})
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
pk, err := resolvePetnamePath("~erin/david/frank")
|
pk, err := resolvePetnamePath("~erin/david/frank", me.Public())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, frank.Public(), pk)
|
require.Equal(t, frank.Public(), pk)
|
||||||
}
|
}
|
||||||
@@ -108,9 +106,8 @@ func TestResolvePetnamePathSingleHop(t *testing.T) {
|
|||||||
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
})
|
})
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
pk, err := resolvePetnamePath("~erin")
|
pk, err := resolvePetnamePath("~erin", me.Public())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, erin.Public(), pk)
|
require.Equal(t, erin.Public(), pk)
|
||||||
}
|
}
|
||||||
@@ -122,9 +119,8 @@ func TestResolvePetnamePathCurrentUser(t *testing.T) {
|
|||||||
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
})
|
})
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
pk, err := resolvePetnamePath("~/erin")
|
pk, err := resolvePetnamePath("~/erin", me.Public())
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, erin.Public(), pk)
|
require.Equal(t, erin.Public(), pk)
|
||||||
}
|
}
|
||||||
@@ -137,7 +133,7 @@ func TestResolvePetnamePathDirectRootWithoutIdentity(t *testing.T) {
|
|||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
})
|
})
|
||||||
|
|
||||||
pk, err := resolvePetnamePath("~" + nip19.EncodeNpub(me.Public()) + "/erin")
|
pk, err := resolvePetnamePath("~"+nip19.EncodeNpub(me.Public())+"/erin", nostr.ZeroPK)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, erin.Public(), pk)
|
require.Equal(t, erin.Public(), pk)
|
||||||
}
|
}
|
||||||
@@ -152,7 +148,7 @@ func TestResolvePetnamePathNip05Root(t *testing.T) {
|
|||||||
|
|
||||||
// the first segment must be routed to nip05 (which will fail to connect here, as nothing
|
// the first segment must be routed to nip05 (which will fail to connect here, as nothing
|
||||||
// listens on 127.0.0.1:443) instead of being treated as a petname
|
// listens on 127.0.0.1:443) instead of being treated as a petname
|
||||||
_, err := resolvePetnamePath("~erin@127.0.0.1/david")
|
_, err := resolvePetnamePath("~erin@127.0.0.1/david", nostr.ZeroPK)
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
require.Contains(t, err.Error(), "request failed")
|
require.Contains(t, err.Error(), "request failed")
|
||||||
require.NotContains(t, err.Error(), "follow list")
|
require.NotContains(t, err.Error(), "follow list")
|
||||||
@@ -167,32 +163,30 @@ func TestResolvePetnamePathErrors(t *testing.T) {
|
|||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
erin: {{Pubkey: david.Public(), Petname: "david"}},
|
erin: {{Pubkey: david.Public(), Petname: "david"}},
|
||||||
})
|
})
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
// unknown petname at root
|
// unknown petname at root
|
||||||
_, err := resolvePetnamePath("~carol")
|
_, err := resolvePetnamePath("~carol", me.Public())
|
||||||
require.ErrorContains(t, err, "no one in your follow list")
|
require.ErrorContains(t, err, "no one in your follow list")
|
||||||
|
|
||||||
// unknown petname mid-chain
|
// unknown petname mid-chain
|
||||||
_, err = resolvePetnamePath("~erin/carol")
|
_, err = resolvePetnamePath("~erin/carol", me.Public())
|
||||||
require.ErrorContains(t, err, "doesn't follow anyone named")
|
require.ErrorContains(t, err, "doesn't follow anyone named")
|
||||||
|
|
||||||
// empty reference
|
// empty reference
|
||||||
_, err = resolvePetnamePath("~")
|
_, err = resolvePetnamePath("~", me.Public())
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
// empty segment
|
// empty segment
|
||||||
_, err = resolvePetnamePath("~erin//frank")
|
_, err = resolvePetnamePath("~erin//frank", me.Public())
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
// invalid petname characters
|
// invalid petname characters
|
||||||
_, err = resolvePetnamePath("~er\tin")
|
_, err = resolvePetnamePath("~er\tin", me.Public())
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
|
|
||||||
// no identity
|
// no identity
|
||||||
rootSec = ""
|
_, err = resolvePetnamePath("~erin", nostr.ZeroPK)
|
||||||
_, err = resolvePetnamePath("~erin")
|
require.ErrorContains(t, err, "without an identity")
|
||||||
require.ErrorContains(t, err, "no secret key")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestResolvePetnameMissingFollowList(t *testing.T) {
|
func TestResolvePetnameMissingFollowList(t *testing.T) {
|
||||||
@@ -205,10 +199,9 @@ func TestResolvePetnameMissingFollowList(t *testing.T) {
|
|||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
erin: nil,
|
erin: nil,
|
||||||
})
|
})
|
||||||
t.Cleanup(func() { sys = nil; rootSec = "" })
|
t.Cleanup(func() { sys = nil })
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
_, err := resolvePetnamePath("~erin/frank")
|
_, err := resolvePetnamePath("~erin/frank", me.Public())
|
||||||
require.ErrorContains(t, err, "couldn't get follow list")
|
require.ErrorContains(t, err, "couldn't get follow list")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +212,6 @@ func TestParsePubKeyUnaffectedInputs(t *testing.T) {
|
|||||||
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
setupPetnameSystem(t, map[nostr.SecretKey][]sdk.ProfileRef{
|
||||||
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
me: {{Pubkey: erin.Public(), Petname: "erin"}},
|
||||||
})
|
})
|
||||||
rootSec = me.Hex()
|
|
||||||
|
|
||||||
// plain npub keeps working through parsePubKey
|
// plain npub keeps working through parsePubKey
|
||||||
pk, err := parsePubKey(nip19.EncodeNpub(erin.Public()), nostr.ZeroPK)
|
pk, err := parsePubKey(nip19.EncodeNpub(erin.Public()), nostr.ZeroPK)
|
||||||
|
|||||||
Reference in New Issue
Block a user