Add channel property to MarketingCampaign

This commit is contained in:
Nima 2022-12-28 13:23:26 +00:00
parent 53dac1d8e3
commit 6415f3f911
2 changed files with 37 additions and 8 deletions

View File

@ -22,6 +22,13 @@ class MarketingCampaign implements JsonSerializable {
*/
protected $id;
/**
* The marketing channel that this campaign belongs to.
*
* @var MarketingChannelInterface
*/
protected $channel;
/**
* Title of the marketing campaign.
*
@ -46,13 +53,15 @@ class MarketingCampaign implements JsonSerializable {
/**
* MarketingCampaign constructor.
*
* @param string $id The marketing campaign's unique identifier.
* @param string $title The title of the marketing campaign.
* @param string $manage_url The URL to the channel's campaign management page.
* @param Price|null $cost The cost of the marketing campaign with the currency.
* @param string $id The marketing campaign's unique identifier.
* @param MarketingChannelInterface $channel The marketing channel that this campaign belongs to.
* @param string $title The title of the marketing campaign.
* @param string $manage_url The URL to the channel's campaign management page.
* @param Price|null $cost The cost of the marketing campaign with the currency.
*/
public function __construct( string $id, string $title, string $manage_url, Price $cost = null ) {
public function __construct( string $id, MarketingChannelInterface $channel, string $title, string $manage_url, Price $cost = null ) {
$this->id = $id;
$this->channel = $channel;
$this->title = $title;
$this->manage_url = $manage_url;
$this->cost = $cost;
@ -67,6 +76,15 @@ class MarketingCampaign implements JsonSerializable {
return $this->id;
}
/**
* Returns the marketing channel that this campaign belongs to.
*
* @return MarketingChannelInterface
*/
public function get_channel(): MarketingChannelInterface {
return $this->channel;
}
/**
* Returns the title of the marketing campaign.
*
@ -102,6 +120,7 @@ class MarketingCampaign implements JsonSerializable {
public function jsonSerialize() {
return [
'id' => $this->get_id(),
'channel' => $this->get_channel()->get_slug(),
'title' => $this->get_title(),
'manage_url' => $this->get_manage_url(),
'cost' => $this->get_cost(),

View File

@ -3,6 +3,7 @@
namespace Automattic\WooCommerce\Tests\Admin\Marketing;
use Automattic\WooCommerce\Admin\Marketing\MarketingCampaign;
use Automattic\WooCommerce\Admin\Marketing\MarketingChannelInterface;
use Automattic\WooCommerce\Admin\Marketing\Price;
use WC_Unit_Test_Case;
@ -15,7 +16,10 @@ class MarketingCampaignTest extends WC_Unit_Test_Case {
* @testdox `get_id`, `get_title`, `get_manage_url`, and `get_cost` return the class properties set by the constructor.
*/
public function test_get_methods_return_properties() {
$marketing_campaign = new MarketingCampaign( '1234', 'Ad #1234', 'https://example.com/manage-campaigns', new Price( '1000', 'USD' ) );
$test_channel_1 = $this->createMock( MarketingChannelInterface::class );
$test_channel_1->expects( $this->any() )->method( 'get_slug' )->willReturn( 'test-channel-1' );
$marketing_campaign = new MarketingCampaign( '1234', $test_channel_1, 'Ad #1234', 'https://example.com/manage-campaigns', new Price( '1000', 'USD' ) );
$this->assertEquals( '1234', $marketing_campaign->get_id() );
$this->assertEquals( 'Ad #1234', $marketing_campaign->get_title() );
@ -29,7 +33,9 @@ class MarketingCampaignTest extends WC_Unit_Test_Case {
* @testdox `cost` property can be null.
*/
public function test_cost_can_be_null() {
$marketing_campaign = new MarketingCampaign( '1234', 'Ad #1234', 'https://example.com/manage-campaigns' );
$test_channel_1 = $this->createMock( MarketingChannelInterface::class );
$marketing_campaign = new MarketingCampaign( '1234', $test_channel_1, 'Ad #1234', 'https://example.com/manage-campaigns' );
$this->assertNull( $marketing_campaign->get_cost() );
}
@ -38,13 +44,17 @@ class MarketingCampaignTest extends WC_Unit_Test_Case {
* @testdox It can be serialized to JSON including all its properties.
*/
public function test_can_be_serialized_to_json() {
$marketing_campaign = new MarketingCampaign( '1234', 'Ad #1234', 'https://example.com/manage-campaigns', new Price( '1000', 'USD' ) );
$test_channel_1 = $this->createMock( MarketingChannelInterface::class );
$test_channel_1->expects( $this->any() )->method( 'get_slug' )->willReturn( 'test-channel-1' );
$marketing_campaign = new MarketingCampaign( '1234', $test_channel_1, 'Ad #1234', 'https://example.com/manage-campaigns', new Price( '1000', 'USD' ) );
$json = wp_json_encode( $marketing_campaign );
$this->assertNotEmpty( $json );
$this->assertEqualSets(
[
'id' => $marketing_campaign->get_id(),
'channel' => 'test-channel-1',
'title' => $marketing_campaign->get_title(),
'manage_url' => $marketing_campaign->get_manage_url(),
'cost' => [