[ {"name": "a good form: the email normalised and the name trimmed for storage", "args": [" Ada@Example.COM ", "correct horse battery staple", " Ada Lovelace ", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": true, "email": "Ada@example.com", "name": "Ada Lovelace", "fields": {}}}, {"name": "a short password", "args": ["ada@example.com", "short", "Ada Lovelace", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "ada@example.com", "name": "Ada Lovelace", "fields": {"password": "Use at least 15 characters."}}}, {"name": "several password failures are joined into one message", "args": ["ada@example.com", "password", "Ada Lovelace", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "ada@example.com", "name": "Ada Lovelace", "fields": {"password": "Use at least 15 characters. This password is too common. Choose something harder to guess."}}}, {"name": "the password contains the (normalised) email's local part and the trimmed name", "args": ["Ada@example.com", "ada-lovelace-rules-ok", "Ada Lovelace", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "Ada@example.com", "name": "Ada Lovelace", "fields": {"password": "Do not include your email address in your password. Do not include your name in your password."}}}, {"name": "every field empty", "args": ["", "", "", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": null, "name": null, "fields": {"email": "Enter your email address.", "password": "Enter a password.", "name": "Enter your name."}}}, {"name": "an email that is only spaces counts as empty", "args": [" ", "correct horse battery staple", "Ada", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": null, "name": "Ada", "fields": {"email": "Enter your email address."}}}, {"name": "an email that is not an address", "args": ["ada@localhost", "correct horse battery staple", "Ada", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": null, "name": "Ada", "fields": {"email": "Enter a valid email address, like name@example.com."}}}, {"name": "a name of 101 characters", "args": ["ada@example.com", "correct horse battery staple", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "ada@example.com", "name": null, "fields": {"name": "Use no more than 100 characters for your name."}}}, {"name": "a name of exactly 100 characters, counted in code points (emoji are one each)", "args": ["ada@example.com", "correct horse battery staple", "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": true, "email": "ada@example.com", "name": "😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀😀", "fields": {}}}, {"name": "a control character inside the name", "args": ["ada@example.com", "correct horse battery staple", "Ada\u0000Lovelace", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "ada@example.com", "name": null, "fields": {"name": "Your name cannot contain control characters."}}}, {"name": "names in any script are fine", "args": ["li@example.cn", "correct horse battery staple", "李小龍", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": true, "email": "li@example.cn", "name": "李小龍", "fields": {}}}, {"name": "the multi-factor policy accepts 8 characters", "args": ["ada@example.com", "tr0ub4dor", "Ada Lovelace", {"name": "nist-800-63b-4-multi-factor", "minLength": 8, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": true, "email": "ada@example.com", "name": "Ada Lovelace", "fields": {}}}, {"name": "a password that is not a string (a malformed JSON body) is treated as empty", "args": ["ada@example.com", 12345, "Ada", {"name": "nist-800-63b-4-single-factor", "minLength": 15, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expect": {"valid": false, "email": "ada@example.com", "name": "Ada", "fields": {"password": "Enter a password."}}}, {"name": "a nonsensical policy is the caller's error", "args": ["ada@example.com", "x", "Ada", {"name": "nist-800-63b-4-single-factor", "minLength": 0, "maxLength": 128, "minCharacterClasses": 0, "blockCommon": true, "blockPersonal": true}], "expectError": "policy minLength must be a whole number of at least 1"} ]