[Groonga-commit] groonga/gcs [master] Add support for DescribeDefaultSearchField action

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index