var generator = require('../../../helper/labelGenerator');

module.exports.tests = {};

module.exports.tests.interface = function(test, common) {
  test('interface', function(t) {
    t.equal(typeof generator, 'function', 'valid function');
    t.end();
  });
};

module.exports.tests.canada = function(test, common) {
  test('venue', function(t) {
    var doc = {
      'name': 'Tim Horton\'s',
      'layer': 'venue',
      'housenumber': '1',
      'street': 'Main St',
      'neighbourhood': 'College Heights',
      'locality': 'Thunder Bay',
      'region_a': 'ON',
      'region': 'Ontario',
      'country_a': 'CAN',
      'country': 'Canada'
    };
    t.equal(generator(doc),'Tim Horton\'s, Thunder Bay, ON, Canada');
    t.end();
  });

  test('address', function(t) {
    var doc = {
      'name': '1 Main St',
      'layer': 'venue',
      'housenumber': '1',
      'street': 'Main St',
      'locality': 'Truth or Consequences',
      'region_a': 'NM',
      'region': 'New Mexico',
      'country_a': 'USA',
      'country': 'United States'
    };
    t.equal(generator(doc),'1 Main St, Truth or Consequences, NM, USA');
    t.end();
  });
};

module.exports.tests.france = function(test, common) {
  test('eiffel tower', function(t) {
    var doc = {
      'name': 'Tour Eiffel',
      'layer': 'venue',
      'neighbourhood': 'Quartier du Gros-Caillou',
      'locality': 'Paris',
      'region': 'Paris',
      'country_a': 'FRA',
      'country': 'France'
    };
    t.equal(generator(doc),'Tour Eiffel, Paris, France');
    t.end();
  });

  test('France street address', function(t) {
    var doc = {
      'name': '74 rue de rivoli',
      'layer': 'address',
      'housenumber': '74',
      'street': 'Rue de Rivoli',
      'neighbourhood': 'Quartier Saint-Merri',
      'locality': 'Paris',
      'region': 'Paris',
      'country_a': 'FRA',
      'country': 'France'
    };
    t.equal(generator(doc),'74 rue de rivoli, Paris, France');
    t.end();
  });

  test('France neighbourhood', function(t) {
    var doc = {
      'name': 'Grange aux Belles Terrage',
      'layer': 'neighbourhood',
      'neighbourhood': 'Grange aux Belles Terrage',
      'locality': 'Paris',
      'region': 'Paris',
      'country_a': 'FRA',
      'country': 'France'
    };
    t.equal(generator(doc),'Grange aux Belles Terrage, Paris, France');
    t.end();
  });

  test('Luxembourg (the city) in Luxembourg', function(t) {
    var doc = {
      'name': 'Luxembourg',
      'layer': 'locality',
      'locality': 'Luxembourg',
      'country_a': 'LUX',
      'country': 'Luxembourg'
    };
    // console.error(generator(doc));
    t.equal(generator(doc),'Luxembourg, Luxembourg');
    t.end();
  });

};

module.exports.tests.name_only = function(test, common) {
  test('name-only results (no admin fields) should not include extraneous comma', function(t) {
    var doc = {
      'name': 'Result name',
    };
    t.equal(generator(doc),'Result name');
    t.end();
  });

};

module.exports.all = function (tape, common) {

  function test(name, testFunction) {
    return tape('label generator (CAN): ' + name, testFunction);
  }

  for( var testCase in module.exports.tests ){
    module.exports.tests[testCase](test, common);
  }
};