# frozen_string_literal: true module Grape module DSL module DescSpec class Dummy extend Grape::DSL::Desc end end describe Desc do subject { Class.new(DescSpec::Dummy) } describe '.desc' do it 'sets a description' do desc_text = 'The description' options = { message: 'none' } subject.desc desc_text, options expect(subject.namespace_setting(:description)).to eq(options.merge(description: desc_text)) expect(subject.route_setting(:description)).to eq(options.merge(description: desc_text)) end it 'can be set with a block' do expected_options = { summary: 'summary', description: 'The description', detail: 'more details', params: { first: :param }, entity: Object, default: { code: 400, message: 'Invalid' }, http_codes: [[401, 'Unauthorized', 'Entities::Error']], named: 'My named route', body_name: 'My body name', headers: [ XAuthToken: { description: 'Valdates your identity', required: true }, XOptionalHeader: { description: 'Not really needed', required: false } ], hidden: false, deprecated: false, is_array: true, nickname: 'nickname', produces: %w[array of mime_types], consumes: %w[array of mime_types], tags: %w[tag1 tag2], security: %w[array of security schemes] } subject.desc 'The description' do summary 'summary' detail 'more details' params(first: :param) success Object default code: 400, message: 'Invalid' failure [[401, 'Unauthorized', 'Entities::Error']] named 'My named route' body_name 'My body name' headers [ XAuthToken: { description: 'Valdates your identity', required: true }, XOptionalHeader: { description: 'Not really needed', required: false } ] hidden false deprecated false is_array true nickname 'nickname' produces %w[array of mime_types] consumes %w[array of mime_types] tags %w[tag1 tag2] security %w[array of security schemes] end expect(subject.namespace_setting(:description)).to eq(expected_options) expect(subject.route_setting(:description)).to eq(expected_options) end it 'can be set with options and a block' do expect(subject).to receive(:warn).with('[DEPRECATION] Passing a options hash and a block to `desc` is deprecated. Move all hash options to block.') desc_text = 'The description' detail_text = 'more details' options = { message: 'none' } subject.desc desc_text, options do detail detail_text end expect(subject.namespace_setting(:description)).to eq(description: desc_text, detail: detail_text) expect(subject.route_setting(:description)).to eq(description: desc_text, detail: detail_text) end end end end end