App-Test-Generator

 view release on metacpan or  search on metacpan

t/Model-Method.t  view on Meta::CPAN


	# Setter works
	$m->return_type('string');
	is($m->return_type, 'string', 'return_type set to string');

	# Overwrite works
	$m->return_type('object');
	is($m->return_type, 'object', 'return_type overwritten');

	# Set to undef
	$m->return_type(undef);
	is($m->return_type, undef, 'return_type set to undef');
};

# ==================================================================
# classification accessor -- read/write
# ==================================================================
subtest 'classification accessor' => sub {
	my $m = _method();

	is($m->classification, undef, 'classification initially undef');

	$m->classification('getter');
	is($m->classification, 'getter', 'classification set to getter');

	$m->classification('chainable');
	is($m->classification, 'chainable', 'classification overwritten');
};

# ==================================================================
# confidence accessor -- read/write
# ==================================================================
subtest 'confidence accessor' => sub {
	my $m = _method();

	is($m->confidence, undef, 'confidence initially undef');

	my $conf = { score => 42, level => 'high' };
	$m->confidence($conf);
	is_deeply($m->confidence, $conf, 'confidence set to hashref');
};

# ==================================================================
# add_evidence -- validation
# ==================================================================
subtest 'add_evidence: validation' => sub {
	my $m = _method();

	# Invalid category croaks
	throws_ok {
		$m->add_evidence(category => 'invalid', signal => 'returns_property')
	} qr/Invalid evidence category/, 'invalid category croaks';

	# Missing category croaks
	throws_ok {
		$m->add_evidence(signal => 'returns_property')
	} qr/Invalid evidence category/, 'missing category croaks';

	# Invalid signal croaks
	throws_ok {
		$m->add_evidence(category => 'return', signal => 'not_a_signal')
	} qr/Invalid evidence signal/, 'invalid signal croaks';

	# Missing signal croaks
	throws_ok {
		$m->add_evidence(category => 'return')
	} qr/Invalid evidence signal/, 'missing signal croaks';
};

# ==================================================================
# add_evidence -- valid categories and signals
# ==================================================================
subtest 'add_evidence: valid entries' => sub {
	my $m = _method();

	# All three valid categories
	lives_ok {
		$m->add_evidence(category => 'return', signal => 'returns_property')
	} 'return category accepted';

	lives_ok {
		$m->add_evidence(category => 'input', signal => 'input_validated')
	} 'input category accepted';

	lives_ok {
		$m->add_evidence(category => 'effect', signal => 'has_side_effect')
	} 'effect category accepted';

	is(scalar($m->evidence), 3, 'three evidence entries added');

	# Default weight is 1 when not specified
	my @ev = $m->evidence;
	is($ev[0]{weight}, 1, 'default weight is 1');

	# Explicit weight is stored
	my $m2 = _method();
	$m2->add_evidence(
		category => 'return',
		signal   => 'returns_self',
		weight   => 15,
	);
	my @ev2 = $m2->evidence;
	is($ev2[0]{weight}, 15, 'explicit weight stored correctly');

	# Value field is stored when provided
	my $m3 = _method();
	$m3->add_evidence(
		category => 'return',
		signal   => 'returns_property',
		value    => 'name',
		weight   => 20,
	);
	my @ev3 = $m3->evidence;
	is($ev3[0]{value}, 'name', 'value field stored correctly');
};

# ==================================================================
# evidence and evidence_ref
# ==================================================================
subtest 'evidence and evidence_ref' => sub {
	my $m = _method();



( run in 0.944 second using v1.01-cache-2.11-cpan-9581c071862 )