1// Copyright 2015 Keybase, Inc. All rights reserved. Use of
2// this source code is governed by the included BSD license.
3
4package libkb
5
6import (
7	"testing"
8
9	"github.com/stretchr/testify/require"
10)
11
12type checkerTest struct {
13	input string
14	valid bool
15}
16
17var usernameTests = []checkerTest{
18	{input: "a", valid: false},
19	{input: "az", valid: true},
20	{input: "0123456789abcdef", valid: true},
21	{input: "0123456789abcdefg", valid: false},
22	{input: "_foo", valid: false},
23	{input: "foo_bar_baz", valid: true},
24	{input: "foo__bar", valid: false},
25	{input: "Upper_Case", valid: true},
26}
27
28func TestCheckUsername(t *testing.T) {
29	for _, test := range usernameTests {
30		res := CheckUsername.F(test.input)
31		require.Equal(t, res, test.valid)
32	}
33}
34
35var deviceNameTests = []checkerTest{
36	{input: "home computer", valid: true},
37	{input: " home computer", valid: false},
38	{input: " home computer ", valid: false},
39	{input: "home computer ", valid: false},
40	{input: "home  computer", valid: false},
41	{input: "home - computer", valid: true},
42	{input: "Mike's computer", valid: true},
43	{input: "tab\tcomputer", valid: false},
44	{input: "foo -- computer", valid: false},
45	{input: "foo - _ - computer", valid: false},
46	{input: "home computer-", valid: false},
47	{input: "home computer+", valid: true},
48	{input: "home computer'", valid: false},
49	{input: "home computer_", valid: false},
50	{input: "not��ascii", valid: false},
51	{input: "John’s iPhone", valid: true},
52	{input: "absolute@unit", valid: false},
53	{input: "absolute(unit", valid: false},
54}
55
56func TestCheckDeviceName(t *testing.T) {
57	for _, test := range deviceNameTests {
58		res := CheckDeviceName.F(test.input)
59		require.Equal(t, res, test.valid)
60	}
61}
62
63type normalizeTest struct {
64	name1 string
65	name2 string
66}
67
68var deviceNormalizeTests = []normalizeTest{
69	{name1: "home computer", name2: "homecomputer"},
70	{name1: "home - computer", name2: "homecomputer"},
71	{name1: "Mike's computer", name2: "mikescomputer"},
72	{name1: "John’s iPhone", name2: "johnsiphone"},
73}
74
75func TestNormalizeDeviceName(t *testing.T) {
76	for _, test := range deviceNormalizeTests {
77		require.Equal(t, test.name2, CheckDeviceName.Normalize(test.name1))
78	}
79}
80