0

I am working in laravel-lumen. I have two models. An Organization model and an Apikey model corresponding to an organizations and an apikeys table. The column organization_id in the apikeys table is a foreign key referring to the id field of the organizations table.

The model for organizations looks like

<?php
namespace App;
use App\Apikey
use Illuminate\Database\Eloquent\Model;

Class Organization Extends Model {

   public $table = 'organizations';
   public $fillable = [
              'name',
              'contact_name',
              'contact_phone',
              'contact_email',
              'address1',
              'state',
              'city',
              'zip',
              'country'
            ];

   public function apikeys()
   {
     return  $this->hasMany('App\Apikey');
   }
}

The apikeys model looks like this

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
Class Apikey Extends Model {

   public $table = 'apikeys';
   public $fillable = [
              'key',
              'secret',
              'organization_id',
              'permissions'
            ];

}

organization_id in apikeys is a foreign key in the organizations table that refers to the id field of organizations table.

Now I have a controller that generates the api key given an organization_id and the permissions and fills the apikeys table. It looks like this

<?php
 use App\Http\Controllers\Controller;
 use App\Apikey;
 use Illuminate\Http\Request;


 public function generateApiKeyGivenOrganizationId(Request $request)
 {
  $data = $request->all();
  // code for generating api key.
  $dd = [
        'key' => 'generated encrypted key',
        'secret' => 'secret',
        'organization_id' => $data['organization_id'],
        'permissions' => $data['permissions']
         ];
  $xx = Apikey::create($dd);
  return response()->json(['status' => 'ok', 'apikey_id' => $xx->id]);
 }
}          

I want to test this code. I created two model factories like this.

 $factory->define(Organization::class, function ($faker) use ($factory) {
         return [
              'name' => $faker->name,
              'contact_name' => $faker->name,
              'contact_phone' => '324567',
              'contact_email' => $faker->email,
              'address1' => 'xxx',
              'state' => 'Newyork',
              'city' => 'Newyork',
              'country' => 'USA'
    ];
 });

$factory->define(Apikey::class, function ($faker) use ($factory) {
   return [
    'key' => 'xxx',
    'secret' => 'xxxx',
    'permissions' =>'111',
    'organization_id' => 7
});

My testing function looks like this.

 public function testApiKeyGeneration ()
 {
   factory(App\Organization::class)->create()->each(function($u) {
          $data = [
                  'organization_id' => $u->id,
                  'permissions' => '111'
                  ];

          $this->post('/createapikeyfororg' , $data)
          ->seeJson(['status' => 'ok']);
   });
  }

The controller works perfectly. It is only in the testing I am having problems. The url '/createapikeyfororg' is the url that invokes the controller method generateApiKeyGivenOrganizationId(). Is this testing procedure correct? I am yet to try it out and I am asking this question on a Saturday because I am really in a hurry. I am a total novice at testing and I am in a hurry and any help would be appreciated.

jai
  • 391
  • 2
  • 6
  • 14

0 Answers0