/**
  * Store a new lead source (i.e phone number) and redirect to edit
  * page
  *
  * @param  Request $request
  * @return Response
  */
 public function store(Request $request)
 {
     $appSid = $this->_appSid();
     $phoneNumber = $request->input('phoneNumber');
     $this->_twilioClient->incomingPhoneNumbers->create(["phoneNumber" => $phoneNumber, "voiceApplicationSid" => $appSid, "voiceCallerIdLookup" => true]);
     $leadSource = new LeadSource(['number' => $phoneNumber]);
     $leadSource->save();
     return redirect()->route('lead_source.edit', [$leadSource]);
 }
 public function testDestroy()
 {
     // Given
     Session::start();
     $this->assertCount(0, LeadSource::all());
     $newLeadSource = new LeadSource(['number' => '+136428733', 'description' => 'Some billboard somewhere', 'forwarding_number' => '+13947283']);
     $newLeadSource->save();
     $this->assertCount(1, LeadSource::all());
     $mockNumber = Mockery::mock();
     $mockNumber->sid = 'sup3runiq3s1d';
     $mockTwilioClient = Mockery::mock(Client::class);
     $mockPhoneToDelete = Mockery::mock(IncomingPhoneNumberInstance::class);
     $mockPhoneToDelete->shouldReceive("delete")->once();
     $mockTwilioClient->incomingPhoneNumbers = Mockery::mock(IncomingPhoneNumberList::class);
     $mockTwilioClient->incomingPhoneNumbers->shouldReceive('read')->withAnyArgs()->once()->andReturn([0 => $mockPhoneToDelete]);
     App::instance(Client::class, $mockTwilioClient);
     // When
     $response = $this->call('DELETE', route('lead_source.destroy', [$newLeadSource]), ['_token' => Session::token()]);
     // Then
     $this->assertCount(0, LeadSource::all());
 }
 public function testSummaries()
 {
     // Given
     $fakeNumberOne = '+1153614723';
     $fakeNumberTwo = '+1153619723';
     $leadSourceOne = new LeadSource(['number' => '+1153614723', 'description' => 'Downtown south billboard', 'forwarding_number' => '+155005501']);
     $leadSourceTwo = new LeadSource(['number' => '+1153619723', 'description' => 'Downtown north billboard', 'forwarding_number' => '+155005502']);
     $leadSourceOne->save();
     $leadSourceTwo->save();
     $leadOne = new Lead(['caller_number' => '+148975933', 'city' => 'Some city', 'state' => 'Some state', 'caller_name' => 'John Doe', 'call_sid' => 'sup3runiq3']);
     $leadTwo = new Lead(['caller_number' => '+149824734', 'city' => 'Some other city', 'state' => 'Some state', 'caller_name' => 'John Doe', 'call_sid' => 'sup3runiq3']);
     $leadOne->leadSource()->associate($leadSourceOne->id);
     $leadOne->save();
     $leadTwo->leadSource()->associate($leadSourceTwo->id);
     $leadTwo->save();
     // When
     $responseByCity = $this->call('GET', route('lead.summary_by_city'));
     $responseByLeadSource = $this->call('GET', route('lead.summary_by_lead_source'));
     // Then
     $responseContentOne = json_decode($responseByCity->getContent(), true);
     $responseContentTwo = json_decode($responseByLeadSource->getContent(), true);
     $this->assertEquals([["lead_count" => 1, "city" => "Some other city"], ["lead_count" => 1, "city" => "Some city"]], $responseContentOne);
     $this->assertEquals([["lead_count" => 1, "description" => "Downtown south billboard", "number" => '+1153614723'], ["lead_count" => 1, "description" => "Downtown north billboard", "number" => '+1153619723']], $responseContentTwo);
 }