SHIMODA Hiroshi
null+****@clear*****
Wed Aug 15 12:32:29 JST 2012
SHIMODA Hiroshi 2012-08-15 12:32:29 +0900 (Wed, 15 Aug 2012) New Revision: 791d9408a45ac179b34a58a195d3fc50068ff580 https://github.com/groonga/gcs/commit/791d9408a45ac179b34a58a195d3fc50068ff580 Log: Add support for DescribeDefaultSearchField action Modified files: lib/api/2011-02-01/configuration.js test/api-configuration.test.js Modified: lib/api/2011-02-01/configuration.js (+60 -8) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-08-15 12:45:13 +0900 (fee287c) +++ lib/api/2011-02-01/configuration.js 2012-08-15 12:32:29 +0900 (0e3aedf) @@ -455,19 +455,33 @@ handlers.UpdateSynonymOptions = function(context, request, response) { } }; +function createDefaultSearchFieldStatus(options) { + var defaultSearchFieldStatus = xmlbuilder.create(); + defaultSearchFieldStatus.begin('DefaultSearchField', { version: '1.0' }) + .element('Options').text(options.fieldName).up() + .importXMLBuilder(createOptionStatus({ + createdAt: options.createdAt, + state: options.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + element: options.optionStatusElement + })); + return defaultSearchFieldStatus; +} + function createUpdateDefaultSearchFieldResponse(options) { var doc = xmlbuilder.create(); doc.begin('UpdateDefaultSearchFieldResponse', { version: '1.0' }) .attribute('xmlns', XMLNS) .element('UpdateDefaultSearchFieldResult') - .element('DefaultSearchField') - .element('Options').text(options.fieldName).up() - .importXMLBuilder(createOptionStatus({ createdAt: options.createdAt, - state: options.state, - updatedAt: options.updatedAt, - updateVersion: options.updateVersion, - element: 'Status' })) - .up() + .importXMLBuilder(createDefaultSearchFieldStatus({ + fieldName: options.fieldName, + createdAt: options.createdAt, + state: options.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + optionStatusElement: 'Status' })) + })) .up() .element('ResponseMetadata') .element('RequestId').text(options.requestId || '').up() @@ -494,6 +508,44 @@ handlers.UpdateDefaultSearchField = function(context, request, response) { } }; +function createDescribeDefaultSearchFieldResponse(options) { + var doc = xmlbuilder.create(); + doc.begin('DescribeDefaultSearchFieldResponse', { version: '1.0' }) + .attribute('xmlns', XMLNS) + .element('DescribeDefaultSearchFieldResult') + .importXMLBuilder(createDefaultSearchFieldStatus({ + fieldName: options.fieldName, + createdAt: options.createdAt, + state: options.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + optionStatusElement: 'Status' })) + })) + .up() + .element('ResponseMetadata') + .element('RequestId').text(options.requestId || '').up() + .up(); + return doc.toString(); +} + +handlers.DescribeDefaultSearchField = function(context, request, response) { + var domain = new Domain(request.query.DomainName, context); + try { + var field = domain.defaultSearchField; + var updatedAt = new Date(); + response.send(createUpdateDefaultSearchFieldResponse({ + fieldName: field ? field.name : '', + updatedAt: updatedAt, + createdAt: updatedAt + })); + } catch (error) { + var body = createCommonErrorResponse('InternalFailure', + (error.message || error).toString()); + response.contentType('application/xml'); + response.send(body, 400); + } +}; + function getClientIp(request) { var forwardedIps = request.header('x-forwarded-for'); if (forwardedIps) { Modified: test/api-configuration.test.js (+85 -12) =================================================================== --- test/api-configuration.test.js 2012-08-15 12:45:13 +0900 (1218e91) +++ test/api-configuration.test.js 2012-08-15 12:32:29 +0900 (838789c) @@ -208,27 +208,51 @@ var PATTERN_COMMON_ERROR_RESPONSE = { } }; -var PATTERN_UpdateDefaultSearchField = { +var PATTERN_DefaultSearchFieldStatus = { + Options: '', + Status: PATTERN_OptionStatus + }; + +var PATTERN_DefaultSearchFieldStatus_blank = { + Options: {}, + Status: PATTERN_OptionStatus + }; + +var PATTERN_UpdateDefaultSearchFieldResponse = { UpdateDefaultSearchFieldResponse: { '@': { xmlns: '' }, UpdateDefaultSearchFieldResult: { - DefaultSearchField: { - Options: '', - Status: PATTERN_OptionStatus - }, + DefaultSearchField: PATTERN_DefaultSearchFieldStatus, }, ResponseMetadata: PATTERN_ResponseMetadata } }; -var PATTERN_UpdateDefaultSearchField_blank = { +var PATTERN_UpdateDefaultSearchFieldResponse_blank = { UpdateDefaultSearchFieldResponse: { '@': { xmlns: '' }, UpdateDefaultSearchFieldResult: { - DefaultSearchField: { - Options: {}, - Status: PATTERN_OptionStatus - }, + DefaultSearchField: PATTERN_DefaultSearchFieldStatus_blank, + }, + ResponseMetadata: PATTERN_ResponseMetadata + } + }; + +var PATTERN_DescribeDefaultSearchFieldResponse = { + DescribeDefaultSearchFieldResponse: { + '@': { xmlns: '' }, + DescribeDefaultSearchFieldResult: { + DefaultSearchField: PATTERN_DefaultSearchFieldStatus, + }, + ResponseMetadata: PATTERN_ResponseMetadata + } + }; + +var PATTERN_DescribeDefaultSearchFieldResponse_blank = { + DescribeDefaultSearchFieldResponse: { + '@': { xmlns: '' }, + DescribeDefaultSearchFieldResult: { + DefaultSearchField: PATTERN_DefaultSearchFieldStatus_blank, }, ResponseMetadata: PATTERN_ResponseMetadata } @@ -930,7 +954,7 @@ suite('Configuration API', function() { response = toParsedResponse(response); assert.deepEqual(response.pattern, { statusCode: 200, - body: PATTERN_UpdateDefaultSearchField }); + body: PATTERN_UpdateDefaultSearchFieldResponse }); var fieldName = response.body.UpdateDefaultSearchFieldResponse .UpdateDefaultSearchFieldResult @@ -946,7 +970,7 @@ suite('Configuration API', function() { response = toParsedResponse(response); assert.deepEqual(response.pattern, { statusCode: 200, - body: PATTERN_UpdateDefaultSearchField_blank }); + body: PATTERN_UpdateDefaultSearchFieldResponse_blank }); var fieldName = response.body.UpdateDefaultSearchFieldResponse .UpdateDefaultSearchFieldResult @@ -961,6 +985,55 @@ suite('Configuration API', function() { }); }); + test('Get, Action=DescribeDefaultSearchField', function(done) { + var domain; + utils + .get('/?DomainName=companies&Action=CreateDomain&Version=2011-02-01', { + 'Host': 'cloudsearch.localhost' + }) + .get('/?DomainName=companies&IndexField.IndexFieldName=name&' + + 'Action=DefineIndexField&Version=2011-02-01') + .next(function() { + domain = new Domain('companies', context); + assert.isTrue(domain.defaultSearchField === null, + domain.defaultSearchField); + }) + .get('/?Version=2011-02-01&Action=DescribeDefaultSearchField&' + + 'DomainName=companies') + .next(function(response) { + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_DescribeDefaultSearchFieldResponse_blank }); + + var fieldName = response.body.DescribeDefaultSearchFieldResponse + .DescribeDefaultSearchFieldResult + .DefaultSearchField.Options; + // xml2json converts the content of the empty element to a blank object, not a blank text. + assert.deepEqual(fieldName, {}); + }) + .get('/?Version=2011-02-01&Action=UpdateDefaultSearchField&' + + 'DomainName=companies&DefaultSearchField=name') + .get('/?Version=2011-02-01&Action=DescribeDefaultSearchField&' + + 'DomainName=companies') + .next(function(response) { + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_DescribeDefaultSearchFieldResponse }); + + var fieldName = response.body.DescribeDefaultSearchFieldResponse + .DescribeDefaultSearchFieldResult + .DefaultSearchField.Options; + assert.deepEqual(fieldName, 'name'); + + done(); + }) + .error(function(error) { + done(error); + }); + }); + test('Get, no version', function(done) { utils .get('/?Action=unknown', { -------------- next part -------------- HTML����������������������������...Download