from itertools import islice import pytest from util.validation import is_json, validate_label_key, generate_valid_usernames, validate_username @pytest.mark.parametrize('username, is_valid', [ ('ja', True), ('jak', True), ('jake', True), ('ja_ke', True), ('te-st', True), ('te.st', True), ('z' * 30, True), ('z' * 255, True), ('j', False), ('z' * 256, False), ('_test', False), ('Test', False), ('hello world', False), ('te---st', False), ]) def test_validate_username(username, is_valid): valid, _ = validate_username(username) assert valid == is_valid @pytest.mark.parametrize('string_value,expected', [ ('{}', True), ('[]', True), ('[hello world]', False), ('{hello world}', False), ('[test] this is a test', False), ('hello world', False), ('{"hi": "there"}', True), ('[1, 2, 3, 4]', True), ('[1, 2, {"num": 3}, 4]', True), ]) def test_is_json(string_value, expected): assert is_json(string_value) == expected @pytest.mark.parametrize('key, is_valid', [ ('foo', True), ('bar', True), ('foo1', True), ('bar2', True), ('1', True), ('12', True), ('123', True), ('1234', True), ('git-sha', True), ('com.coreos.something', True), ('io.quay.git-sha', True), ('', False), ('git_sha', False), ('-125', False), ('-foo', False), ('foo-', False), ('123-', False), ('foo--bar', False), ('foo..bar', False), ]) def test_validate_label_key(key, is_valid): assert validate_label_key(key) == is_valid @pytest.mark.parametrize('input_username, expected_output', [ ('jake', 'jake'), ('frank', 'frank'), ('fra-nk', 'fra_nk'), ('Jake', 'jake'), ('FranK', 'frank'), ('ja__ke', 'ja_ke'), ('ja___ke', 'ja_ke'), ('ja__', 'ja'), ('jake__', 'jake'), ('_jake', 'jake'), ('a', 'a0'), ('ab', 'ab'), ('abc', 'abc'), ('abcdefghijklmnopqrstuvwxyz1234567890', 'abcdefghijklmnopqrstuvwxyz1234567890'), ('c' * 256, 'c' * 255), (u'\xc6neid', 'aeneid'), (u'\xe9tude', 'etude'), (u'\u5317\u4eb0', 'bei_jing'), (u'\u1515\u14c7\u14c7', 'shanana'), (u'\u13d4\u13b5\u13c6', 'taliqua'), (u'\u0726\u071b\u073d\u0710\u073a', 'ptu_i'), (u'\u0905\u092d\u093f\u091c\u0940\u0924', 'abhijiit'), (u'\u0985\u09ad\u09bf\u099c\u09c0\u09a4', 'abhijiit'), (u'\u0d05\u0d2d\u0d3f\u0d1c\u0d40\u0d24', 'abhijiit'), (u'\u0d2e\u0d32\u0d2f\u0d3e\u0d32\u0d2e\u0d4d', 'mlyaalm'), (u'\ue000', '00'), (u'\u03ff', '00'), (u'\u0d2e\u0d32\u03ff\u03ff\u0d2e\u0d32', 'mlml'), ]) def test_generate_valid_usernames(input_username, expected_output): name_gen = generate_valid_usernames(input_username) generated_output = list(islice(name_gen, 1))[0] assert generated_output == expected_output def test_multiple_suggestions(): name_gen = generate_valid_usernames('a') generated_output = list(islice(name_gen, 4)) assert generated_output[0] == 'a0' assert generated_output[1] == 'a1' assert generated_output[2] == 'a2' assert generated_output[3] == 'a3'