fullstackfox16
1 year ago

Testing a many to many relationship

Posted 1 year ago by fullstackfox16

I have a Board model and a Pin model, and they are many to many. I am testing to make sure that when a pin gets created and assigned a board, it saves to the pivot table. I am having trouble figuring this out since I am new to testing.

Here is my Test:

/** @test */
    public function a_pin_can_belong_to_a_board()
    {
        $board = create('App\Board');
        $pin = make('App\Pin');

        $response = $this->post('/pins/create', $pin->toArray());

        $pin->boards()->sync($board);

        $this->assertDatabaseHas('board_pin', [
            'board_id' => $board->id,
            'pin_id' => $pin->id
        ]);
    }

Here is my Error:

1) Tests\Unit\PinTest::a_pin_can_belong_to_a_board
Illuminate\Database\QueryException: SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: board_pin.pin_id (SQL: insert into "board_pin" ("board_id", "pin_id") values (1, ))

Caused by
PDOException: SQLSTATE[23000]: Integrity constraint violation: 19 NOT NULL constraint failed: board_pin.pin_id

Here is my Controller:

public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required|max:200',
            'link' => 'required|max:255'
        ]);

        $pin = new Pin();

        $pin->title = $request->title;
        $pin->link = $request->link;
        $pin->user_id = auth()->id();

        $pin->save();

        $pin->boards()->sync($request->boards);

        return redirect("/pins/{$pin->id}");
    }

Any help would be greatly appreciated! Thank you!

Please sign in or create an account to participate in this conversation.