class RallyTaskUpdateResponder < GenericResponder

  def call(env)
    @requests << request = Rack::Request.new(env)

    case request.path
    when '/slm/webservice/current/Task'
      [200, {}, [
        <<-XML
          <?xml version="1.0" encoding="UTF-8"?>
          <QueryResult rallyAPIMajor="1" rallyAPIMinor="17">
            <TotalResultCount>1</TotalResultCount>
            <StartIndex>1</StartIndex>
            <PageSize>20</PageSize>
            <Results>
              <Object rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/task/12345" refObjectName="Tie your shoes!" type="Task" />
            </Results>
          </QueryResult>
        XML
      ]]
    when '/slm/webservice/1.17/task/12345'
      if request.get?
        [200, {}, [
          <<-XML
            <Task rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/task/12345" objectVersion="8" refObjectName="Tie your shoes!" CreatedAt="today at 8:31 pm">
              <CreationDate>2012-07-17T03:31:33.801Z</CreationDate>
              <ObjectID>12345</ObjectID>
              <Description />
              <Discussion />
              <FormattedID>TA6666</FormattedID>
              <LastUpdateDate>2012-07-17T04:00:35.888Z</LastUpdateDate>
              <Name>Tie your shoes!</Name>
              <Notes />
              <Owner>tester@testing.com</Owner>
              <Tags />
              <Attachments />
              <Blocked>false</Blocked>
              <Rank>4000</Rank>
              <State>Defined</State>
              <TaskIndex>2</TaskIndex>
              <ToDo>2.0</ToDo>
            </Task>
          XML
        ]]
      elsif request.post?
        [200, {}, [
          <<-XML
            <OperationResult rallyAPIMajor="1" rallyAPIMinor="17">
              <Errors />
              <Warnings />
            </OperationResult>
          XML
        ]]
      end
    when '/slm/webservice/current/User'
      if request.params["query"].include? "Freddy Fender"
        [200, {}, [
          <<-XML
            <QueryResult rallyAPIMajor="1" rallyAPIMinor="17">
              <Errors />
              <Warnings />
              <TotalResultCount>1</TotalResultCount>
              <StartIndex>1</StartIndex>
              <PageSize>20</PageSize>
              <Results>
                <Object rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/user/4567" refObjectName="Freddy Fender" type="User" />
              </Results>
            </QueryResult>
          XML
        ]]
      else
        RallyNoResultsResponder.new.call(env)
      end
    when '/slm/webservice/1.17/user/4567'
      [200, {}, [
        <<-XML
          <User rallyAPIMajor="1" rallyAPIMinor="17" ref="https://rally1.rallydev.com/slm/webservice/1.17/user/4567" objectVersion="50" refObjectName="Freddy Fender">
            <ObjectID>4567</ObjectID>
            <Disabled>false</Disabled>
            <DisplayName>Freddy Fender</DisplayName>
            <EmailAddress>fred.fender@testing.com</EmailAddress>
            <FirstName>Freddy</FirstName>
            <LastName>Fender</LastName>
            <LoginName>fred.fender@testing.com</LoginName>
          </User>
        XML
      ]]
    else
      RallyNoResultsResponder.new.call(env)
    end
  end
end