Parser = require("../src/parser/parser")
StringLogger       = require "./utils/string_logger"

source = 
  title: "Example"
  description: "API Model Example"
  resources:
    Team:
      name: "Team"
      schema:
        properties:
          name: 
            type: "string"
        requiredProperties: ["name"]

      actions:
        read: 
          name: "read"
          protocols:
            http:
              method: "GET"
              url:    "http://jas.example.com/api/teams/:id"

          params:
            properties:
              id:
                type: "string"

          returns:
            $ref: "http://example.com/apimod/schema/resources/Team"


  types:
    Error:
      name: "Error"
      schema:
        properties:
          code: 
            type: "number"
          message:
            type: "string"
        required: [ "message" ]


it "Should parse api schema", ->
  parser = new Parser()
  api = parser.parse(source)

  class PrintVisitor
    constructor: (@logger) ->
      @level = 0

    log: (string) ->
      @logger.log (new Array(@level + 1).join(" ") + string)

    visit: (e) ->
      @log [e.getEntityType()].concat( if e.getName then [e.getName()] else [] ).join(" ")
      @level++
      ite = e.getChildrenIterator()
      while ite.hasNext()
        @visit(ite.next())
      @level--

  logger = new StringLogger()
  visitor = new PrintVisitor(logger)
  visitor.visit(api)
  logger.buffer.should.equal """
Api
 Resource Team
  Action read
 Type Error

"""
