I have the following method[1] I want to test.
def create_docker_tag(manifest, tag_json)
tag = DockerTag.where(:repository_id => id, :name =>
tag_json[:name]).first
if tag
tag.docker_manifest_id = manifest.id
tag.uuid = tag_json[:_id]
tag.save
else
tag = DockerTag.create(:repository_id => id,
:docker_manifest_id => manifest.id,
:name => tag_json[:name], :uuid =>
tag_json[:_id])
end
tag
end
Here is the original test[2] (note the 'expects' is no longer relevant):
def test_create_docker_no_tag
manifest = FactoryGirl.build(:docker_manifest)
@fedora_17_x86_64.expects(:unit_search).returns([])
@fedora_17_x86_64.create_docker_tag(manifest, 'asdf')
end
I would like to write two tests, one where the DockerTag exists already,
and one where it does not and so is created. I am unsure what to
FactoryGirl, or stub, or assert, etc.
Pointers to resources that would assist me, and other devs I assume, in
writing tests for the framework katello uses would be great. Really,
anything would be great since I feel like I'm just iterating on random
guesses to try to figure out what to do.
For example, this doesn't work:
def test_create_docker_no_tag
manifest = FactoryGirl.build(:docker_manifest)
manifest.id = 1
@fedora_17_x86_64.create_docker_tag(manifest, {:name => 'asdf',
:_id => '1234')
end
- Error:
Katello::GluePulpNonVcrTests#test_create_docker_no_tag:
ActiveRecord::RecordInvalid: Validation failed: Docker manifest can't be blank
test_after_commit (1.1.0)
lib/test_after_commit/database_statements.rb:11:inblock in transaction' test_after_commit (1.1.0) lib/test_after_commit/database_statements.rb:5:in
transaction'
/home/vagrant/katello/app/models/katello/glue/pulp/repo.rb:539:in
create_docker_tag' ./katello/test/glue/pulp/repository_test.rb:67:in
test_create_docker_no_tag'
[1]
[2]