GithubHelp home page GithubHelp logo

specmatic-coding-test's Introduction

Specmatic Coding Test

Prerequisites:

JDK 17+ OR Specmatic IDE Plugin

Instructions:

1. Fork this repository on Github. Checkout your forked repo to your local machine.

DO NOT RAISE A PR AND SHARE YOUR SOLUTION WITH THE WORLD

Java/Kotlin Steps

From a terminal, run the following command:

mvn clean test

You should see 84 failing tests:

[ERROR] Tests run: 84, Failures: 84, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

IDE Plugin Steps (Programming Language Agnostic)

  1. Install Specmatic VS Code Extension or Jetbrains IDEs Plugin
  2. Launch command pallet and type "Run Contract Tests", this should launch the Specmatic plugin
  3. In the Contract Test Settings screen, update the following:
  • Update API specification file to ./products_api.yaml
  • Select the checkbox for Generative tests
  • Click on the "Save and Run" button
  1. You should see 84 failing tests:
[ERROR] Tests run: 84, Failures: 84, Errors: 0, Skipped: 0
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

Specmatic VSCode Extension Screenshot

Objective of this Assignment

Your objective is to get all the tests to pass by following the rest of the instructions.

2. Introduction to Specmatic

3. Part 1 - Implement REST endpoints:

Java/Kotlin Steps

  • This is a Kotlin based Spring Boot application.
  • You are expected to implement the missing endpoints in the Products controller.

Note:

  • You are not expected to use a database. Instead, use an in memory map to store and retrieve products.
  • Feel free to leverage GPT or Github Copilot.
  • Please do not alter the following files:
    • ContractTest.kt
    • products_api.yaml
    • specmatic.json

Other Programming Languages Steps

  • Pick any programming language and Web API framework of your choice.
  • You are expected to implement the missing endpoints.

4. Part 1 - Definition of Done

  • All 84 tests are passing
  • 100% API Coverage from 1 path is achieved
  • Code changes are committed to your Github repo.

5. Part 2 - Added property 'cost' to the ProductDetails schema

  • Update the products_api.yaml OpenAPI specification such that 'cost' is added as a new property to ProductDetails
  • This will increase the test count to 197 and cause a few tests to fail
  • Update your kotlin code to make all the tests pass again.

6. Part 2 - Ensure Backward Compatibility is not broken

mvn exec:java

You should see:

The newer contract is backward compatible

7. Part 2 - Definition of Done

  • All 197 tests are passing
  • 100% API Coverage is still maintained
  • Code changes are committed to your Github repo.

8. Trigger the CI pipeline under Github Actions.

  • Make sure all tests are passing on the pipeline as well.
  • Email the following details to [email protected]:
    • Screenshot of passing CI pipeline
    • Screenshot of API Coverage report
    • Link to you github repo

If you like Specmatic, please give us a star on GitHub! GitHub Repo stars

9. Judging Criteria

  • All 197 tests are passing in the Github Actions (CI pipeline)
  • 100% API Coverage
  • 3 Design Values are met:
    • Communication
    • Simplicity
    • Flexibility
  • Kent Beck's 4 Rules of Simple Design are followed:
    • Passes the tests (197 Contract Tests + Bonus points if you write unit tests)
    • Reveals intention (Self-documenting and expressive code)
    • No duplication (Avoid any form of duplication - Literal, Semantic, Structural or Data)
    • Fewest elements (Minimalistic Code - No combinatorial explosion)
  • XP Principles
    • YAGNI - You Aren't Gonna Need It
    • KISS - Keep It Simple, Stupid
    • Triangulate
    • DRY - Don't Repeat yourself
  • Make sure you adhere to your Programming Pradigm specific Design Principles:
    • Object Oriented
      • Single Responsibility Principle (SRP)
      • Open Closed Principle (OCP)
      • Liskov Substitution Principle (LSP)
      • Interface Segregation Principle (ISP)
      • Dependency Inversion Principle (DIP)
      • Once and Only Once
      • TDA - Tell Don't Ask
      • The Law of Demeter
    • Functional Programming
      • First-Class and Higher-Order Functions
      • Pure, Side-Effect Free Functions
        • Idempotence
        • Thread-safe Evaluation and Parallelism
        • Deforestation - Transforming programs to eliminate trees
        • Immutability
        • Referential Transparency
      • Declarative Programming
      • Tackling complexity by composing functions
        • Curry / Partial Functional Application
        • Point-free Programming
      • Using Monads to DRY the code
      • Being efficient by being lazy

specmatic-coding-test's People

Contributors

harikrishnan83 avatar nashjain avatar shivanig14 avatar yogeshnikam671 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.