# frozen_string_literal: true require 'spec_helper' require 'rack/test' require 'vmpooler/api/input_validator' describe Vmpooler::API::InputValidator do let(:test_class) do Class.new do include Vmpooler::API::InputValidator end end let(:validator) { test_class.new } describe '#validate_hostname' do it 'accepts valid hostnames' do expect(validator.validate_hostname('test-host.example.com')).to be true expect(validator.validate_hostname('host123')).to be true end it 'rejects invalid hostnames' do result = validator.validate_hostname('invalid_host!') expect(result['ok']).to be false expect(result['error']).to include('Invalid hostname format') end it 'rejects hostnames that are too long' do long_hostname = 'a' * 300 result = validator.validate_hostname(long_hostname) expect(result['ok']).to be false expect(result['error']).to include('too long') end it 'rejects empty hostnames' do result = validator.validate_hostname('') expect(result['ok']).to be false expect(result['error']).to include('required') end end describe '#validate_pool_name' do it 'accepts valid pool names' do expect(validator.validate_pool_name('centos-7-x86_64')).to be true expect(validator.validate_pool_name('ubuntu-2204')).to be true end it 'rejects invalid pool names' do result = validator.validate_pool_name('invalid pool!') expect(result['ok']).to be false expect(result['error']).to include('Invalid pool name format') end it 'rejects pool names that are too long' do result = validator.validate_pool_name('a' * 150) expect(result['ok']).to be false expect(result['error']).to include('too long') end end describe '#validate_tag' do it 'accepts valid tags' do expect(validator.validate_tag('project', 'test-123')).to be true expect(validator.validate_tag('owner', 'user@example.com')).to be true end it 'rejects tags with invalid keys' do result = validator.validate_tag('invalid key!', 'value') expect(result['ok']).to be false expect(result['error']).to include('Invalid tag key format') end it 'rejects tags with invalid characters in value' do result = validator.validate_tag('key', 'value