1
0
mirror of https://github.com/quay/quay.git synced 2026-01-26 06:21:37 +03:00
Files
quay/util/test/test_validation.py
Ryan Wallace a06cc6fa43 chore: update all black versions to 24.4.2 and run make black (#4754)
* 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
2025-12-19 11:29:53 -06:00

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"