mirror of
https://github.com/quay/quay.git
synced 2026-01-26 06:21:37 +03:00
* chore(pre-commit): match black version with requirements-dev * run `make black` against repo * ci: switch to black 24.4.2 * fix: py312 * fix: flake8 errors * fix: flake8 conflicts * chore: add git blame ignore revs file
137 lines
3.7 KiB
Python
137 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
from itertools import islice
|
|
|
|
import pytest
|
|
|
|
from util.validation import (
|
|
generate_valid_usernames,
|
|
is_json,
|
|
validate_label_key,
|
|
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),
|
|
("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),
|
|
("\xc6neid", "aeneid"),
|
|
("\xe9tude", "etude"),
|
|
("\u5317\u4eb0", "bei_jing"),
|
|
("\u1515\u14c7\u14c7", "shanana"),
|
|
("\u13d4\u13b5\u13c6", "taliqua"),
|
|
("\u0726\u071b\u073d\u0710\u073a", "ptu_i"),
|
|
("\u0905\u092d\u093f\u091c\u0940\u0924", "abhijiit"),
|
|
("\u0985\u09ad\u09bf\u099c\u09c0\u09a4", "abhijiit"),
|
|
("\u0d05\u0d2d\u0d3f\u0d1c\u0d40\u0d24", "abhijiit"),
|
|
("\u0d2e\u0d32\u0d2f\u0d3e\u0d32\u0d2e\u0d4d", "mlyaalm"),
|
|
("\ue000", "00"),
|
|
("\u03ff", "00"),
|
|
("\u0d2e\u0d32\u03ff\u03ff\u0d2e\u0d32", "ml_ml"),
|
|
("\u0d2e\u0d32\u0d2e\u0d32", "mlml"),
|
|
(b"kenny", "kenny"),
|
|
(b"c" * 256, "c" * 255),
|
|
# \uXXXX are only interpreted in unicode strings
|
|
(rb"\u0d2e\u0d32\u0d2e\u0d32", "u0d2e_u0d32_u0d2e_u0d32"),
|
|
],
|
|
)
|
|
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"
|