Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save beccasaurus/e35193932257c95b22a445a5e22aca34 to your computer and use it in GitHub Desktop.
Save beccasaurus/e35193932257c95b22a445a5e22aca34 to your computer and use it in GitHub Desktop.
$ sampletester :: Dogs Code Samples

$ sampletester :: Dog Code Samples 🐕

This contains scripts which support the following:

  • create_dog – Create dog with provided name
  • list_dogs – List all dog names
  • delete_dogDelete dog with provided name

These scripts demonstrate the sampletester tool.

See related section in the TESTING_GUIDE here: Testing code samples in multiple languages

This includes an example of sampletester tests confirming that scripts in Ruby and BASH have the same, correct behavior.


# $ sampletester -s *.yaml

PASSED: Test environment: "ruby"
  PASSED: Test suite: "Dog Samples"
    PASSED: Test case: "Create Dog"
    PASSED: Test case: "Delete Dog (exists)"
    PASSED: Test case: "Delete Dog (does not exist)"
PASSED: Test environment: "bash"
  PASSED: Test suite: "Dog Samples"
    PASSED: Test case: "Create Dog"
    PASSED: Test case: "Delete Dog (exists)"
    PASSED: Test case: "Delete Dog (does not exist)"

Tests passe
.dogs.txt
.dogs.yaml
touch .dogs.txt
echo "$1" >> .dogs.txt
DOGS_FILE = ".dogs.yaml"
DOG_NAME = ARGV.shift
unless DOG_NAME
puts "Usage: #{$0} [dog name]"
exit 2
end
require "fileutils"
FileUtils.touch DOGS_FILE
require "yaml"
document = YAML.load_file DOGS_FILE
document = { "dogs" => [] } unless document
document["dogs"].push DOG_NAME
puts "document: #{document}"
File.write DOGS_FILE, document.to_yaml
touch .dogs.txt
dogs="$(./list-dogs.sh)"
if [ -n "$dogs" ]; then
if echo -e "$dogs\n" | grep -Fx "$1"; then
echo -e "$dogs" | grep -vFx "$1" > .dogs.txt
exit 0
else
echo "Dog not found: $1"
fi
else
echo "Dog not found: $1"
fi
DOGS_FILE = ".dogs.yaml"
DOG_NAME = ARGV.shift
unless DOG_NAME
puts "Usage: #{$0} [dog name]"
exit 2
end
require "fileutils"
FileUtils.touch DOGS_FILE
require "yaml"
document = YAML.load_file DOGS_FILE
document = { "dogs" => [] } unless document
if document["dogs"].include? DOG_NAME
document["dogs"].reject! {|name| DOG_NAME == name }
File.write DOGS_FILE, document.to_yaml
else
puts "Dog not found: #{DOG_NAME}"
end
---
version: 1
sets:
- environment: ruby
bin: ruby
__items__:
- sample: create_dog
path: create_dog.rb
- sample: delete_dog
path: delete_dog.rb
- sample: list_dogs
path: list_dogs.rb
- environment: bash
bin: /bin/bash
path: ./
__items__:
- sample: create_dog
path: create-dog.sh
- sample: delete_dog
path: delete-dog.sh
- sample: list_dogs
path: list-dogs.sh
test:
suites:
- name: Dog Samples
setup:
- uuid: dog_name
- log:
- "Dog name for this test: {}"
- dog_name
teardown:
- log:
- "Trying to delete dog (if created successfully) ({})"
- dog_name
- call:
target: list_dogs
- call_may_fail:
target: delete_dog
args:
- variable: dog_name
cases:
- name: Create Dog
spec:
- call:
target: list_dogs
- assert_not_contains:
- message: "Dog already exists"
- variable: dog_name
# Create dog
- call:
target: create_dog
args:
- variable: dog_name
# Verify
- call:
target: list_dogs
- assert_contains:
- message: "Dog was not created successfully"
- variable: dog_name
- name: Delete Dog (exists)
spec:
- call:
target: create_dog
args:
- variable: dog_name
- call:
target: list_dogs
- assert_contains:
- variable: dog_name
# Delete dog
- call:
target: delete_dog
args:
- variable: dog_name
# Verify
- call:
target: list_dogs
- assert_not_contains:
- message: "Dog was not deleted"
- variable: dog_name
- name: Delete Dog (does not exist)
spec:
- call:
target: delete_dog
args:
- literal: This Dog Does Not Exist
- assert_contains:
- literal: "Dog not found"
touch .dogs.txt
cat .dogs.txt
DOGS_FILE = ".dogs.yaml"
require "yaml"
if File.file? DOGS_FILE
YAML.load_file(DOGS_FILE)["dogs"].each {|name| puts name }
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment