Navigation Menu

Skip to content

Commit

Permalink
Add support for UpdateDefaultSearchField action
Browse files Browse the repository at this point in the history
  • Loading branch information
piroor committed Aug 15, 2012
1 parent d39fbd1 commit 228fb00
Show file tree
Hide file tree
Showing 2 changed files with 127 additions and 23 deletions.
77 changes: 61 additions & 16 deletions lib/api/2011-02-01/configuration.js
Expand Up @@ -197,6 +197,18 @@ function createIndexFieldOptionStatus(options) {
}
}

function createOptionStatus(options) {
var optionStatus = xmlbuilder.create();
optionStatus.begin(options.element || 'Status', { version: '1.0' })
.element('CreationDate').text(dateFormat(options.createdAt,
'isoUtcDateTime')).up()
.element('State').text(options.state || 'RequiresIndexDocuments').up()
.element('UpdateDate').text(dateFormat(options.updatedAt,
'isoUtcDateTime')).up()
.element('UpdateVersion').text(options.updateVersion || '0');
return optionStatus;
}

function createIndexFieldStatus(options) {
var indexFieldStatus = xmlbuilder.create();
indexFieldStatus.begin(options.element || 'IndexField', { version: '1.0' })
Expand All @@ -205,14 +217,11 @@ function createIndexFieldStatus(options) {
.element('IndexFieldType').text(options.field.type).up()
.importXMLBuilder(createIndexFieldOptionStatus(options))
.up()
.element('Status')
.element('CreationDate').text(dateFormat(options.createdAt,
'isoUtcDateTime')).up()
.element('State').text(options.field.state).up()
.element('UpdateDate').text(dateFormat(options.updatedAt,
'isoUtcDateTime')).up()
.element('UpdateVersion').text(options.updateVersion || '0').up()
.up();
.importXMLBuilder(createOptionStatus({ createdAt: options.createdAt,
state: options.field.state,
updatedAt: options.updatedAt,
updateVersion: options.updateVersion,
element: 'Status' }));
return indexFieldStatus;
}

Expand Down Expand Up @@ -408,17 +417,14 @@ function createUpdateSynonymOptionsResponse(options) {
.attribute('xmlns', XMLNS)
.element('UpdateSynonymOptionsResult')
.element('Synonyms')
.element('Status')
.element('CreationDate').text(dateFormat(options.createdAt,
'isoUtcDateTime')).up()
.element('UpdateVersion').text(options.updateVersion || '0').up()
.element('State').text(options.state || 'RequiresIndexDocuments').up()
.element('UpdateDate').text(dateFormat(options.updatedAt,
'isoUtcDateTime')).up()
.up()
.element('Options')
.text(options.synonymOptions || '{}')
.up()
.importXMLBuilder(createOptionStatus({ createdAt: options.createdAt,
state: options.state,
updatedAt: options.updatedAt,
updateVersion: options.updateVersion,
element: 'Status' }))
.up()
.up()
.element('ResponseMetadata')
Expand Down Expand Up @@ -449,6 +455,45 @@ handlers.UpdateSynonymOptions = function(context, request, response) {
}
};

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()
.up()
.element('ResponseMetadata')
.element('RequestId').text(options.requestId || '').up()
.up();
return doc.toString();
}

handlers.UpdateDefaultSearchField = function(context, request, response) {
var domain = new Domain(request.query.DomainName, context);
try {
var fieldName = request.query.DefaultSearchField;
domain.defaultSearchField = fieldName;
var updatedAt = new Date();
response.send(createUpdateDefaultSearchFieldResponse({
fieldName: fieldName,
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
73 changes: 66 additions & 7 deletions test/api-configuration.test.js
Expand Up @@ -188,13 +188,8 @@ var PATTERN_UpdateSynonymOptionsResponse = {
'@': { xmlns: '' },
UpdateSynonymOptionsResult: {
Synonyms: {
Status: {
CreationDate: '',
UpdateVersion: '',
State: '',
UpdateDate: ''
},
Options: ''
Options: '',
Status: PATTERN_OptionStatus
},
},
ResponseMetadata: PATTERN_ResponseMetadata
Expand All @@ -213,6 +208,19 @@ var PATTERN_COMMON_ERROR_RESPONSE = {
}
};

var PATTERN_UpdateDefaultSearchField = {
UpdateDefaultSearchFieldResponse: {
'@': { xmlns: '' },
UpdateDefaultSearchFieldResult: {
DefaultSearchField: {
Options: '',
Status: PATTERN_OptionStatus
},
},
ResponseMetadata: PATTERN_ResponseMetadata
}
};

function toXMLPattern(fragment) {
switch (typeof fragment) {
default:
Expand Down Expand Up @@ -887,6 +895,57 @@ suite('Configuration API', function() {
});
});

test('Get, Action=UpdateDefaultSearchField', 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=UpdateDefaultSearchField&' +
'DomainName=companies&DefaultSearchField=name')
.next(function(response) {
assert.equal(domain.defaultSearchField, domain.getField('name'));

response = toParsedResponse(response);
assert.deepEqual(response.pattern,
{ statusCode: 200,
body: PATTERN_UpdateDefaultSearchField });

var fieldName = response.body.UpdateDefaultSearchFieldResponse
.UpdateDefaultSearchFieldResult
.DefaultSearchField.Options;
assert.deepEqual(fieldName, 'name');
})
.get('/?Version=2011-02-01&Action=UpdateDefaultSearchField&' +
'DomainName=companies&DefaultSearchField=')
.next(function(response) {
assert.isTrue(domain.defaultSearchField === null,
domain.defaultSearchField);

response = toParsedResponse(response);
assert.deepEqual(response.pattern,
{ statusCode: 200,
body: PATTERN_UpdateDefaultSearchField });

var fieldName = response.body.UpdateDefaultSearchFieldResponse
.UpdateDefaultSearchFieldResult
.DefaultSearchField.Options;
assert.deepEqual(fieldName, '');

done();
})
.error(function(error) {
done(error);
});
});

test('Get, no version', function(done) {
utils
.get('/?Action=unknown', {
Expand Down

0 comments on commit 228fb00

Please sign in to comment.