|
|
@@ -38,8 +38,9 @@ import (
|
|
|
|
|
|
const (
|
|
|
// vaults and items.
|
|
|
- myVault, myVaultID, myVaultUUID = "my-vault", "my-vault-id", "39c31136-d086-47e9-a52c-8fe330d2669a"
|
|
|
- myItem, myItemID, myItemUUID = "my-item", "my-item-id", "687adbe7-e6d2-4059-9a62-dbb95d291143"
|
|
|
+ myVault, myVaultID = "my-vault", "my-vault-id"
|
|
|
+ myItem, myItemID = "my-item", "my-item-id"
|
|
|
+ myNativeItemID = "gdpvdudxrico74msloimk7qjna"
|
|
|
mySharedVault, mySharedVaultID = "my-shared-vault", "my-shared-vault-id"
|
|
|
mySharedItem, mySharedItemID = "my-shared-item", "my-shared-item-id"
|
|
|
myOtherVault, myOtherVaultID = "my-other-vault", "my-other-vault-id"
|
|
|
@@ -120,22 +121,30 @@ func TestFindItem(t *testing.T) {
|
|
|
},
|
|
|
},
|
|
|
{
|
|
|
- setupNote: "uuid: valid basic: one vault, one item, one field",
|
|
|
+ setupNote: "native item ID: one vault, one item, one field",
|
|
|
provider: &ProviderOnePassword{
|
|
|
- vaults: map[string]int{myVaultUUID: 1},
|
|
|
+ vaults: map[string]int{myVault: 1},
|
|
|
client: fake.NewMockClient().
|
|
|
- AddPredictableVaultUUID(myVaultUUID).
|
|
|
- AddPredictableItemWithFieldUUID(myVaultUUID, myItemUUID, key1, value1),
|
|
|
+ AddPredictableVault(myVault).
|
|
|
+ AppendItem(myVaultID, onepassword.Item{
|
|
|
+ ID: myNativeItemID,
|
|
|
+ Title: "My App (Production)",
|
|
|
+ Vault: onepassword.ItemVault{ID: myVaultID},
|
|
|
+ }).
|
|
|
+ AppendItemField(myVaultID, myNativeItemID, onepassword.ItemField{
|
|
|
+ Label: key1,
|
|
|
+ Value: value1,
|
|
|
+ }),
|
|
|
},
|
|
|
checks: []check{
|
|
|
{
|
|
|
- checkNote: "pass",
|
|
|
- findItemName: myItemUUID,
|
|
|
+ checkNote: "find by native item ID",
|
|
|
+ findItemName: myNativeItemID,
|
|
|
expectedErr: nil,
|
|
|
expectedItem: &onepassword.Item{
|
|
|
- ID: myItemUUID,
|
|
|
- Title: myItemUUID,
|
|
|
- Vault: onepassword.ItemVault{ID: myVaultUUID},
|
|
|
+ ID: myNativeItemID,
|
|
|
+ Title: "My App (Production)",
|
|
|
+ Vault: onepassword.ItemVault{ID: myVaultID},
|
|
|
Fields: []*onepassword.ItemField{
|
|
|
{
|
|
|
Label: key1,
|
|
|
@@ -1584,6 +1593,33 @@ func TestSortVaults(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestIsNativeItemID(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ name string
|
|
|
+ input string
|
|
|
+ expected bool
|
|
|
+ }{
|
|
|
+ {"valid native ID", "gdpvdudxrico74msloimk7qjna", true},
|
|
|
+ {"valid native ID all letters", "abcdefghijklmnopqrstuvwxyz", true},
|
|
|
+ {"valid native ID with digits", "abcdefghij0123456789abcdef", true},
|
|
|
+ {"too short", "gdpvdudxrico74msloimk7qjn", false},
|
|
|
+ {"too long", "gdpvdudxrico74msloimk7qjnaa", false},
|
|
|
+ {"empty string", "", false},
|
|
|
+ {"contains uppercase", "Gdpvdudxrico74msloimk7qjna", false},
|
|
|
+ {"contains special char", "gdpvdudxrico7-msloimk7qjna", false},
|
|
|
+ {"RFC 4122 UUID", "687adbe7-e6d2-4059-9a62-dbb95d291143", false},
|
|
|
+ {"item title", "My App (Production)", false},
|
|
|
+ }
|
|
|
+ for _, tt := range tests {
|
|
|
+ t.Run(tt.name, func(t *testing.T) {
|
|
|
+ got := isNativeItemID(tt.input)
|
|
|
+ if got != tt.expected {
|
|
|
+ t.Errorf("isNativeItemID(%q) = %v, want %v", tt.input, got, tt.expected)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestHasUniqueVaultNumbers(t *testing.T) {
|
|
|
type testCase struct {
|
|
|
vaults map[string]int
|