package model import ( "testing" "github.com/go-webauthn/webauthn/protocol" webauthn "github.com/go-webauthn/webauthn/webauthn" "github.com/stretchr/testify/require" ) func TestPasskeyCredentialTransportsRoundTripAndIgnoreMalformedJSON(t *testing.T) { credential := &PasskeyCredential{} credential.SetTransports([]protocol.AuthenticatorTransport{protocol.USB, protocol.Internal}) require.Equal(t, []protocol.AuthenticatorTransport{protocol.USB, protocol.Internal}, credential.TransportList()) credential.Transports = "not-json" require.Nil(t, credential.TransportList()) credential.SetTransports(nil) require.Empty(t, credential.Transports) } func TestPasskeyCredentialConvertsWebAuthnFieldsWithoutLosingFlags(t *testing.T) { webCredential := &webauthn.Credential{ ID: []byte("credential"), PublicKey: []byte("public-key"), AttestationType: "none", Transport: []protocol.AuthenticatorTransport{protocol.Internal}, Flags: webauthn.CredentialFlags{UserPresent: true, UserVerified: true, BackupEligible: true}, Authenticator: webauthn.Authenticator{AAGUID: []byte("aaguid"), SignCount: 8, Attachment: protocol.Platform}, } stored := NewPasskeyCredentialFromWebAuthn(9, webCredential) require.NotNil(t, stored) require.Equal(t, 9, stored.UserID) require.True(t, stored.UserVerified) require.EqualValues(t, 8, stored.SignCount) roundTripped := stored.ToWebAuthnCredential() require.Equal(t, webCredential.ID, roundTripped.ID) require.Equal(t, webCredential.PublicKey, roundTripped.PublicKey) require.True(t, roundTripped.Flags.UserVerified) require.Equal(t, webCredential.Transport, roundTripped.Transport) }