<commit_before>require File.dirname(__FILE__) + '/../test_helper'
require 'way_controller'

class WayControllerTest < ActionController::TestCase
  api_fixtures

  def basic_authorization(user, pass)
    @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
  end

  def content(c)
    @request.env["RAW_POST_DATA"] = c.to_s
  end

  # -------------------------------------
  # Test reading ways.
  # -------------------------------------

  def test_read
    # check that a visible way is returned properly
    get :read, :id => current_ways(:visible_way).id
    assert_response :success

    # check that an invisible way is not returned
    get :read, :id => current_ways(:invisible_way).id
    assert_response :gone

    # check chat a non-existent way is not returned
    get :read, :id => 0
    assert_response :not_found
  end

  ##
  # check the "full" mode
  def test_full
    get :full, :id => current_ways(:visible_way).id
    assert_response :success
    # FIXME check whether this contains the stuff we want!
    #print @response.body
    # Check the way is correctly returned
    way = current_ways(:visible_way)
    assert_select "osm way[id=#{way.id}][version=#{way.version}][visible=#{way.visible}]", 1
    assert_select "osm way nd[ref=#{way.way_nodes[0].node_id}]", 1
    # Check that the node is correctly returned
    nd = current_ways(:visible_way).nodes
    assert_equal 1, nd.count
    nda = nd[0]
    assert_select "osm node[id=#{nda.id}][version=#{nda.version}][lat=#{nda.lat}][lon=#{nda.lon}]", 1 
  end

  # -------------------------------------
  # Test simple way creation.
  # -------------------------------------

  def test_create
    nid1 = current_nodes(:used_node_1).id
    nid2 = current_nodes(:used_node_2).id
    basic_authorization "<EMAIL>", "test"

    # use the first user's open changeset<commit_msg>Made full test a bit more thorough.<commit_after>require File.dirname(__FILE__) + '/../test_helper'
require 'way_controller'

class WayControllerTest < ActionController::TestCase
  api_fixtures

  def basic_authorization(user, pass)
    @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
  end

  def content(c)
    @request.env["RAW_POST_DATA"] = c.to_s
  end

  # -------------------------------------
  # Test reading ways.
  # -------------------------------------

  def test_read
    # check that a visible way is returned properly
    get :read, :id => current_ways(:visible_way).id
    assert_response :success

    # check that an invisible way is not returned
    get :read, :id => current_ways(:invisible_way).id
    assert_response :gone

    # check chat a non-existent way is not returned
    get :read, :id => 0
    assert_response :not_found
  end

  ##
  # check the "full" mode
  def test_full
    Way.find(:all).each do |way|
      get :full, :id => way.id

      # full call should say "gone" for non-visible ways...
      unless way.visible
        assert_response :gone
        next
      end

      # otherwise it should say success
      assert_response :success
      
      # Check the way is correctly returned
      assert_select "osm way[id=#{way.id}][version=#{way.version}][visible=#{way.visible}]", 1
      
      # check that each node in the way appears once in the output as a 
      # reference and as the node element. note the slightly dodgy assumption
      # that nodes appear only once. this is currently the case with the
      # fixtures, but it doesn't have to be.
      way.nodes.each do |n|
        assert_select "osm way nd[ref=#{n.id}]", 1
        assert_select "osm node[id=#{n.id}][version=#{n.version}][lat=#{n.lat}][lon=#{n.lon}]", 1
      end
    end
  end

  # -------------------------------------
  # Test simple way creation.
  # -------------------------------------

  def test_create
    nid1 = current_nodes(:used_node_1).id
    nid2 = current_nodes(:used_node_2).id
    basic_authorization "<EMAIL>", "test"

    # use the first user's open changeset
{'fraction_non_alphanumeric': 0.18179557324048745, 'fraction_numerical': 0.0067147475752300425, 'mean_word_length': 2.3998309382924767, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3090932', 'n_tokens_mistral': 1247, 'n_tokens_neox': 1201, 'n_words': 345}