Skip to content

Instantly share code, notes, and snippets.

@jon-acker
Created September 15, 2019 15:33
Show Gist options
  • Save jon-acker/a3ee8c47e1556d52fa9ff28999e85e75 to your computer and use it in GitHub Desktop.
Save jon-acker/a3ee8c47e1556d52fa9ff28999e85e75 to your computer and use it in GitHub Desktop.
Library Lending System BDD/TDD Kata

Library Lending System

Objective: collaboratively come up with use-case examples and write executable specifications (Gherkin scenarios) for system that allows library members to borrow and return book, as well as charge the correct overdue fines.

Use the scenarios to drive the code to create a software model of the library lending process (the end product is a bunch of classes that can be instantiated and used to run business)

Identify the boundaries of the system (where infrastructure would be connected .e.g. apis or database) and use interfaces at these points. Provide fake implementations for the infrastructure in order to run the scenarios.

Identify the ubiquitous language of the library lending and fine charging domain and use the same language to write the scenarios in. E.g. is it Fee or Fine? is the fine charged or incurred? Be consistent. Pay attention to the nouns, verbs adverbs etc

Rules:

  • Borrower needs to be registered with the Library (become a Member)

  • Library has a catalog which says how many of each book is in stock

  • Members can only borrow books that are in stock

  • Only 2 books can be borrowed at a time

  • Books can be borrowed for 3 days

  • Returning a book up to a week late incurs £5 fine

  • Returning a book more than a week late incurs £10 fine

  • Books can be Checked out or Renewed at the Circulation Desk

  • A book can only be renewed once

  • Member can reserve a book that's not in stock (in which case a hold is placed on the book and as soon as it is returned the borrower is notified and no one else can borrow the book.)

  • Members Borrow books - but the library Lends them.

In order to identify scenarios an event storming session might be useful to sketch out a timeline of a member borrowing, returning and being charged late return feeds.

Simple example:

  Background:
    Given Jon is a member of the library

  Scenario: Borrower is lent a book that's in stock
    Given there is 1 copy of "Harry Potter" in stock
    When Jon borrows the book "Harry Potter" from the library
    Then stock count for "Harry Potter" should be 0
    And the book "Harry Potter" should be loaned to Jon

More complex example

  Scenario: Returning a book late - incurring a fine (after cuttoff)
    Given Jon borrowed the book "Harry Potter" on 17th of March
    When Jon returns the book "Harry Potter" on the 21st of March at 00:00
    Then Jon should be charged a £5 fine
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment