(function ($) {
module("Backend CKAN");

test('_parseCkanResourceUrl', function() {
  var resid = 'eb23e809-ccbb-4ad1-820a-19586fc4bebd';
  var url = 'http://demo.ckan.org/dataset/some-dataset/resource/' + resid;
  var out = recline.Backend.Ckan._parseCkanResourceUrl(url);
  var exp = {
    resource_id: resid,
    endpoint: 'http://demo.ckan.org/api'
  }
  deepEqual(out, exp);
});

test('_normalizeQuery', function() {
  var dataset = new recline.Model.Dataset({
    url: 'does-not-matter',
    id: 'xyz',
    backend: 'ckan'
  });

  var queryObj = {
    q: 'abc',
    sort: [
      { field: 'location', order: 'desc' },
      { field: 'last' }
    ]
  };
  var out = recline.Backend.Ckan._normalizeQuery(queryObj, dataset);
  var exp = {
    resource_id: dataset.id,
    q: 'abc',
    filters: {},
    sort: 'location desc,last ',
    limit: 10,
    offset: 0
  };
  deepEqual(out, exp);
});

test("fetch", function() { 
  var dataset = new recline.Model.Dataset({
    url: 'http://localhost:5000/dataset/test-data-viewer/resource/4f1299ab-a100-4e5f-ba81-e6d234a2f3bd',
    backend: 'ckan'
  });

  var stub = sinon.stub($, 'ajax', function(options) {
    if (options.url.indexOf('datastore_search') != -1) {
      return {
        done: function(callback) {
          callback(sample_data);
          return this;
        },
        fail: function() {
        }
      };
    }
  });

  dataset.fetch().done(function(dataset) {
    deepEqual(
      _.pluck(dataset.fields.toJSON(), 'id'),
      _.pluck(sample_data.result.fields, 'id')
    );
    // check we've mapped types correctly
    equal(dataset.fields.get('x').get('type'), 'integer');
    equal(dataset.fields.get('country').get('type'), 'string');

    // fetch does a query so we can check for records
    equal(dataset.recordCount, 6);
    equal(dataset.records.length, 6);
    equal(dataset.records.at(0).get('id'), 0);
    equal(dataset.records.at(0).get('country'), 'DE');
  });
  $.ajax.restore();
});

var sample_data = {
  "help": "",
  "result": {
    "fields": [
      {
        "id": "_id", 
        "type": "int4"
      }, 
      {
        "id": "id", 
        "type": "int4"
      }, 
      {
        "id": "date", 
        "type": "date"
      }, 
      {
        "id": "x", 
        "type": "int4"
      }, 
      {
        "id": "y", 
        "type": "int4"
      }, 
      {
        "id": "z", 
        "type": "int4"
      }, 
      {
        "id": "country", 
        "type": "text"
      }, 
      {
        "id": "title", 
        "type": "text"
      }, 
      {
        "id": "lat", 
        "type": "float8"
      }, 
      {
        "id": "lon", 
        "type": "float8"
      }
    ], 
    "records": [
      {
        "_id": 1, 
        "country": "DE", 
        "date": "2011-01-01", 
        "id": 0, 
        "lat": 52.56, 
        "lon": 13.4, 
        "title": "first", 
        "x": 1, 
        "y": 2, 
        "z": 3
      }, 
      {
        "_id": 2, 
        "country": "UK", 
        "date": "2011-02-02", 
        "id": 1, 
        "lat": 54.97, 
        "lon": -1.6, 
        "title": "second", 
        "x": 2, 
        "y": 4, 
        "z": 24
      }, 
      {
        "_id": 3, 
        "country": "US", 
        "date": "2011-03-03", 
        "id": 2, 
        "lat": 40.0, 
        "lon": -75.5, 
        "title": "third", 
        "x": 3, 
        "y": 6, 
        "z": 9
      }, 
      {
        "_id": 4, 
        "country": "UK", 
        "date": "2011-04-04", 
        "id": 3, 
        "lat": 57.27, 
        "lon": -6.2, 
        "title": "fourth", 
        "x": 4, 
        "y": 8, 
        "z": 6
      }, 
      {
        "_id": 5, 
        "country": "UK", 
        "date": "2011-05-04", 
        "id": 4, 
        "lat": 51.58, 
        "lon": 0.0, 
        "title": "fifth", 
        "x": 5, 
        "y": 10, 
        "z": 15
      }, 
      {
        "_id": 6, 
        "country": "DE", 
        "date": "2011-06-02", 
        "id": 5, 
        "lat": 51.04, 
        "lon": 7.9, 
        "title": "sixth", 
        "x": 6, 
        "y": 12, 
        "z": 18
      }
    ], 
    "resource_id": "4f1299ab-a100-4e5f-ba81-e6d234a2f3bd", 
    "total": 6
  }, 
  "success": true
};

})(this.jQuery);
