Navigation Menu

Skip to content

Commit

Permalink
Add support for DescribeDefaultSearchField action
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Aug 15, 2012
1 parent 4f4ec39 commit 791d940
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 20 deletions.
68 changes: 60 additions & 8 deletions lib/api/2011-02-01/configuration.js
Expand Up @@ -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()
Expand All @@ -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) {
Expand Down
97 changes: 85 additions & 12 deletions test/api-configuration.test.js
Expand Up @@ -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
}
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand All @@ -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', {
Expand Down

0 comments on commit 791d940

Please sign in to comment.