'use strict'

import { createDefaultSchema, createResponse } from '../http/routes-helper'

describe('testing Generic Routes Utils', () => {
  describe('creating generic responses [createResponse]', () => {
    test('create generic response with all values', () => {
      const response = {
        message: 'Invalid schema',
        statusCode: '400',
        error: 'Invalid schema error message',
      }

      expect(createResponse('Invalid schema', '400', 'Invalid schema error message')).toEqual(
        response
      )
    })

    test('create generic response without status', () => {
      const response = {
        message: 'Invalid schema',
        error: 'Invalid schema error message',
      }

      expect(createResponse('Invalid schema', undefined, 'Invalid schema error message')).toEqual(
        response
      )
    })

    test('create generic response without error', () => {
      const response = {
        message: 'Invalid schema',
        statusCode: '400',
      }

      expect(createResponse('Invalid schema', '400')).toEqual(response)
    })

    test('create generic response only message', () => {
      const response = {
        message: 'Invalid schema',
      }

      expect(createResponse('Invalid schema')).toEqual(response)
    })
  })

  describe('creating generic schema [createDefaultSchema]', () => {
    test('create generic schema without additional properties', () => {
      const successResponseSchema = { generic: 'example', description: 'Successful response' }
      const response = {
        headers: { $ref: 'authSchema#' },
        response: {
          200: successResponseSchema,
          '4xx': { $ref: 'errorSchema#', description: 'Error response' },
        },
      }

      expect(createDefaultSchema(successResponseSchema, {})).toEqual(response)
    })

    test('create generic schema with additional properties', () => {
      const successResponseSchema = { generic: 'example', description: 'Successful response' }
      const additionalProperties = { generic: 'example' }
      const response = {
        headers: {
          $ref: 'authSchema#',
        },
        response: {
          200: successResponseSchema,
          '4xx': { $ref: 'errorSchema#', description: 'Error response' },
        },
        ...additionalProperties,
      }

      expect(createDefaultSchema(successResponseSchema, additionalProperties)).toEqual(response)
    })
  })
})
