public function testCrudForHasOneAndHasManyEmailMessageRelations() { $emailMessage = EmailMessageTestHelper::createDraftSystemEmail('test crud relations', $this->user); $this->assertTrue($emailMessage->save()); $emailMessageId = $emailMessage->id; $emailMessage->forgetAll(); //Check read hasOne relation $emailMessage = EmailMessage::getById($emailMessageId); $emailMessageSender = $emailMessage->sender; $this->assertEquals('*****@*****.**', $emailMessageSender->fromAddress); //Check update hasOne relation $emailMessageSender->fromAddress = '*****@*****.**'; $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $emailMessage = EmailMessage::getById($emailMessageId); $emailMessageSender = $emailMessage->sender; $this->assertEquals('*****@*****.**', $emailMessageSender->fromAddress); //Check delete hasOne relation $emailMessageSender2 = new EmailMessageSender(); $emailMessageSender2->fromAddress = '*****@*****.**'; $emailMessageSender2->fromName = 'system name'; $emailMessage->sender = $emailMessageSender2; $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $found = true; try { EmailMessageSender::getById($emailMessageSender->id); } catch (NotFoundException $exception) { $found = false; } $this->assertFalse($found); //Check read hasMany relation $emailMessage = EmailMessage::getById($emailMessageId); $recipients = $emailMessage->recipients; $recipient = $recipients[0]; $this->assertCount(1, $recipients); $this->assertEquals('*****@*****.**', $recipient->toAddress); //Check update hasMany relation $recipient->toAddress = '*****@*****.**'; $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $emailMessage = EmailMessage::getById($emailMessageId); $recipient = $emailMessage->recipients[0]; $this->assertEquals('*****@*****.**', $recipient->toAddress); //Check add hasMany relation $recipient = new EmailMessageRecipient(); $recipient->toAddress = '*****@*****.**'; $recipient->toName = 'Anne Frank'; $recipient->type = EmailMessageRecipient::TYPE_BCC; $emailMessage->recipients->add($recipient); $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $emailMessage = EmailMessage::getById($emailMessageId); $recipients = $emailMessage->recipients; $recipient = $recipients[1]; $this->assertCount(2, $recipients); //Check update hasMany relation with more than one model set $recipient->toAddress = '*****@*****.**'; $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $emailMessage = EmailMessage::getById($emailMessageId); $recipient = $emailMessage->recipients[1]; $this->assertEquals('*****@*****.**', $recipient->toAddress); //Check delete hasMany relation $emailMessage->recipients->remove($recipient); $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $found = true; try { EmailMessageRecipient::getById($recipient->id); } catch (NotFoundException $exception) { $found = false; } $this->assertFalse($found); //Check delete last hasMany relation model $emailMessage = EmailMessage::getById($emailMessageId); $recipient = $emailMessage->recipients[0]; $emailMessage->recipients->remove($recipient); $this->assertTrue($emailMessage->save()); $emailMessage->forgetAll(); $found = true; try { EmailMessageRecipient::getById($recipient->id); } catch (NotFoundException $exception) { $found = false; } $this->assertFalse($found); $this->assertCount(0, $emailMessage->recipients); }