Вход Регистрация
Файл: aweber/tests/AWeberEntryTest.php
Строк: 441
<?php
require_once('aweber_api/aweber_api.php');
require_once(
'mock_adapter.php');

class 
TestAWeberEntry extends PHPUnit_Framework_TestCase {

    
/**
     * Before each test, sets up mock adapter to fake requests with fixture
     * data and AWeberEntry based on list 303449
     */
    
public function setUp() {
        
$this->adapter get_mock_adapter();
        
$url '/accounts/1/lists/303449';
        
$data $this->adapter->request('GET'$url);
        
$this->entry = new AWeberEntry($data$url$this->adapter);
    }

    
/**
     * Should be an AWeberEntry
     */
    
public function testShouldBeAnAWeberEntry() {
        
$this->assertTrue(is_a($this->entry'AWeberEntry'));
    }

    
/**
     * AWeberEntry should be an AWeberResponse
     */
    
public function testShouldBeAnAWeberResponse() {
        
$this->assertTrue(is_a($this->entry'AWeberResponse'));
    }

    
/**
     * Should be able to access the id property (global to all entries)
     */
    
public function testShouldBeAbleToAccessId() {
        
$this->assertEquals($this->entry->id303449);
    }

    
/**
     * Should be able to access name (or any property unique to the response)
     */
    
public function testShouldBeAbleToAccessName() {
        
$this->assertEquals($this->entry->name'default303449');
    }

    
/**
     * Should be able to discern its type based on its data
     */
    
public function testShouldKnowItsType() {
        
$this->assertEquals($this->entry->type'list');
    }

    
/**
     * When access properties it does not have, but are known sub collections,
     * it will request for it and return the new collection object.
     */
    
public function testShouldProvidedCollections() {
        
$this->adapter->clearRequests();
        
$campaigns $this->entry->campaigns;

        
$this->assertTrue(is_a($campaigns'AWeberCollection'));
        
$this->assertEquals(count($this->adapter->requestsMade), 1);
        
$this->assertEquals($this->adapter->requestsMade[0]['uri'],
            
'/accounts/1/lists/303449/campaigns');
    }

    
/**
     * When accessing non-implemented children of a resource, should raised
     * a not implemented exception
     */
    
public function testShouldThrowExceptionIfNotImplemented() {
        
$this->adapter->clearRequests();
        
$this->setExpectedException('AWeberResourceNotImplemented');
        
$obj $this->entry->something_not_implemented;
        
$this->assertEquals(count($this->adapter->requestsMade), 0);
    }

    
/**
     * Should return the name of all attributes and collections in this entry
     */
    
public function testAttrs() {
        
$this->assertEquals($this->entry->attrs(),
            array(
                
'id'                   => 303449,
                
'name'                 => 'default303449',
                
'self_link'            => 'https://api.aweber.com/1.0/accounts/1/lists/303449',
                
'campaigns'            => 'collection',
                
'subscribers'          => 'collection',
                
'web_forms'            => 'collection',
                
'custom_fields'        => 'collection',
                
'web_form_split_tests' => 'collection',
            )
        );
    }

    
/**
     * Should be able to delete an entry, and it will send a DELETE request to the
     * API servers to its URL
     */
    
public function testDelete() {
        
$this->adapter->clearRequests();
        
$resp $this->entry->delete();
        
$this->assertSame($resptrue);
        
$this->assertEquals(sizeOf($this->adapter->requestsMade), 1);
        
$this->assertEquals($this->adapter->requestsMade[0]['method'], 'DELETE');
        
$this->assertEquals($this->adapter->requestsMade[0]['uri'], $this->entry->url);
    }

    
/**
     * When delete returns a non-200 status code, the delete failed and false is
     * returned.
     */
    
public function testFailedDelete() {
        
$url '/accounts/1';
        
$data $this->adapter->request('GET'$url);
        
$entry = new AWeberEntry($data$url$this->adapter);

        
$this->setExpectedException('AWeberAPIException''Simulated Exception');
        
$entry->delete();
    }

    
/**
     *  Should be able to change a property in an entry's data array directly on
     *  the object, and have that change propogate to its data array
     *
     */
    
public function testSet() {
        
$this->assertNotEquals($this->entry->name'mynewlistname');
        
$this->assertNotEquals($this->entry->data['name'], 'mynewlistname');
        
$this->entry->name 'mynewlistname';
        
$this->assertEquals($this->entry->name'mynewlistname');
        
$this->assertEquals($this->entry->data['name'], 'mynewlistname');
    }

    
/**
     * Should Color a request when a save is made.
     */
    
public function testSave() {
        
$this->entry->name 'mynewlistname';
        
$this->adapter->clearRequests();
        
$resp $this->entry->save();
        
$this->assertEquals(sizeOf($this->adapter->requestsMade), 1);
        
$req $this->adapter->requestsMade[0];
        
$this->assertEquals($req['method'], 'PATCH');
        
$this->assertEquals($req['uri'], $this->entry->url);
        
$this->assertEquals($req['data'], array('name' => 'mynewlistname'));
        
$this->assertSame($resptrue);
    }

    public function 
testSaveFailed() {
        
$url '/accounts/1/lists/505454';
        
$data $this->adapter->request('GET'$url);
        
$entry = new AWeberEntry($data$url$this->adapter);
        
$entry->name 'foobarbaz';
        
$this->setExpectedException('AWeberAPIException''Simulated Exception');
        
$resp $entry->save();
    }

    
/**
     * Should keep track of whether or not this entry is "dirty".  It should
     * not issue save calls if it hasn't been altered since the last successful
     * load / save operation.
     */
    
public function testShouldMaintainDirtiness() {
        
$this->adapter->clearRequests();
        
$resp $this->entry->save();
        
$this->assertEquals(sizeOf($this->adapter->requestsMade), 0);
        
$this->entry->name 'mynewlistname';
        
$resp $this->entry->save();
        
$this->assertEquals(sizeOf($this->adapter->requestsMade), 1);
        
$resp $this->entry->save();
        
$this->assertEquals(sizeOf($this->adapter->requestsMade), 1);
    }


}

abstract class 
AccountTestCase extends PHPUnit_Framework_TestCase {

    public function 
setUp() {
        
$this->adapter get_mock_adapter();
        
$url '/accounts/1';
        
$data $this->adapter->request('GET'$url);
        
$this->entry = new AWeberEntry($data$url$this->adapter);
    }
}

/**
 * TestAWeberAccountEntry
 *
 * Account entries have a handful of special named operations. This asserts
 * that they behave as expected.
 *
 * @uses PHPUnit_Framework_TestCase
 * @package
 * @version $id$
 */
class TestAWeberAccountEntry extends AccountTestCase {

    public function 
testIsAccount() {
        
$this->assertEquals($this->entry->type'account');
    }
}

class 
TestAccountGetWebForms extends AccountTestCase {

    public function 
setUp() {
        
parent::setUp();
        
$this->forms $this->entry->getWebForms();
    }

    public function 
testShouldReturnArray() {
        
$this->assertTrue(is_array($this->forms));
    }

    public function 
testShouldHaveCorrectCountOfEntries() {
        
$this->assertEquals(sizeOf($this->forms), 181);
    }

    public function 
testShouldHaveEntries() {
        foreach(
$this->forms as $entry) {
            
$this->assertTrue(is_a($entry'AWeberEntry'));
        }
    }

    public function 
testShouldHaveFullURL() {
        foreach(
$this->forms as $entry) {
          
$this->assertEquals(preg_match('/^/accounts/1/lists/[0-9]*/web_forms/[0-9]*$/'$entry->url), 1);
        }
    }
}

class 
TestAccountGetWebFormSplitTests extends AccountTestCase {

    public function 
setUp() {
        
parent::setUp();
        
$this->forms $this->entry->getWebFormSplitTests();
    }

    public function 
testShouldReturnArray() {
        
$this->assertTrue(is_array($this->forms));
    }

    public function 
testShouldHaveCorrectCountOfEntries() {
        
$this->assertEquals(sizeOf($this->forms), 10);
    }

    public function 
testShouldHaveEntries() {
        foreach(
$this->forms as $entry) {
            
$this->assertTrue(is_a($entry'AWeberEntry'));
        }
    }

    public function 
testShouldHaveFullURL() {
        foreach(
$this->forms as $entry) {
          
$this->assertEquals(preg_match('/^/accounts/1/lists/[0-9]*/web_form_split_tests/[0-9]*$/'$entry->url), 1);
        }
    }
}

class 
TestAccountFindSubscribers extends AccountTestCase {

    public function 
testShouldSupportFindSubscribersMethod() {
        
$subscribers $this->entry->findSubscribers(array('email' => 'joe@example.com'));
        
$this->assertTrue(is_a($subscribers'AWeberCollection'));
        
$this->assertEquals(count($subscribers), 1);
        
$this->assertEquals($subscribers->data['entries'][0]['self_link'],
                           
'https://api.aweber.com/1.0/accounts/1/lists/303449/subscribers/1');
    }
}

class 
TestAWeberSubscriberEntry extends PHPUnit_Framework_TestCase {

    public function 
setUp() {
        
$this->adapter get_mock_adapter();
        
$url '/accounts/1/lists/303449/subscribers/1';
        
$data $this->adapter->request('GET'$url);
        
$this->entry = new AWeberEntry($data$url$this->adapter);
    }

    public function 
testIsSubscriber() {
        
$this->assertEquals($this->entry->type'subscriber');
    }

    public function 
testHasCustomFields() {
        
$fields $this->entry->custom_fields;
        
$this->assertFalse(empty($fields));
    }

    public function 
testCanReadCustomFields() {
        
$this->assertEquals($this->entry->custom_fields['Color'], 'blue');
        
$this->assertEquals($this->entry->custom_fields['Walruses'], '32');
    }

    public function 
testCanUpdateCustomFields() {
        
$this->entry->custom_fields['Color'] = 'Jeep';
        
$this->entry->custom_fields['Walruses'] = 'Cherokee';
        
$this->assertEquals($this->entry->custom_fields['Color'], 'Jeep');
    }

    public function 
testCanViewSizeOfCustomFields() {
        
$this->assertEquals(sizeOf($this->entry->custom_fields), 6);
    }

    public function 
testCanIterateOverCustomFields() {
        
$count 0;
        foreach (
$this->entry->custom_fields as $field => $value) {
            
$count++;
        }
        
$this->assertEquals($countsizeOf($this->entry->custom_fields));
    }

    public function 
testShouldBeUpdatable() {
        
$this->adapter->clearRequests();
        
$this->entry->custom_fields['Color'] = 'Jeep';
        
$this->entry->save();
        
$data $this->adapter->requestsMade[0]['data'];
        
$this->assertEquals($data['custom_fields']['Color'], 'Jeep');
    }

    public function 
testShouldSupportGetActivity() {
        
$activity $this->entry->getActivity();
        
$this->assertTrue(is_a($activity'AWeberCollection'));
        
$this->assertEquals($activity->total_size1);
    }
}

class 
TestAWeberMoveEntry extends PHPUnit_Framework_TestCase {

    public function 
setUp() {
        
$this->adapter get_mock_adapter();

        
# Get Subscriber
        
$url '/accounts/1/lists/303449/subscribers/1';
        
$data $this->adapter->request('GET'$url);
        
$this->subscriber = new AWeberEntry($data$url$this->adapter);

        
$url '/accounts/1/lists/303449/subscribers/2';
        
$data $this->adapter->request('GET'$url);
        
$this->unsubscribed = new AWeberEntry($data$url$this->adapter);

        
# Different List
        
$url '/accounts/1/lists/505454';
        
$data $this->adapter->request('GET'$url);
        
$this->different_list = new AWeberEntry($data$url$this->adapter);
    }

    
/**
     * Move Succeeded
     */
    
public function testMove_Success() {

         
$this->adapter->clearRequests();
         
$resp $this->subscriber->move($this->different_list);

         
$this->assertEquals(sizeOf($this->adapter->requestsMade), 2);

         
$req $this->adapter->requestsMade[0];
         
$this->assertEquals($req['method'], 'POST');
         
$this->assertEquals($req['uri'], $this->subscriber->url);
         
$this->assertEquals($req['data'], array(
             
'ws.op' => 'move',
             
'list_link' => $this->different_list->self_link));

         
$req $this->adapter->requestsMade[1];
         
$this->assertEquals($req['method'], 'GET');
         
$this->assertEquals($req['uri'], '/accounts/1/lists/505454/subscribers/3');
     }

    
/**
     * Move Failed
     */
     
public function testMove_Failure() {

         
$this->adapter->clearRequests();
         
$this->setExpectedException('AWeberAPIException''Simulated Exception');
         
$this->unsubscribed->move($this->different_list);
         
$this->assertEquals(sizeOf($this->adapter->requestsMade), 1);

         
$req $this->adapter->requestsMade[0];
         
$this->assertEquals($req['method'], 'POST');
         
$this->assertEquals($req['uri'], $this->unsubscribed->url);
         
$this->assertEquals($req['data'], array(
             
'ws.op' => 'move',
             
'list_link' => $this->different_list->self_link));
         return;
     }

     
/**
     * Move with LastMessageSentNumber Succeeded
     */
    
public function testMoveWLastMessageNumberSent_Success() {
         
$this->last_followup_message_number_sent 1;

         
$this->adapter->clearRequests();
         
$resp $this->subscriber->move($this->different_list$this->last_followup_message_number_sent);

         
$this->assertEquals(sizeOf($this->adapter->requestsMade), 2);

         
$req $this->adapter->requestsMade[0];
         
$this->assertEquals($req['method'], 'POST');
         
$this->assertEquals($req['uri'], $this->subscriber->url);
         
$this->assertEquals($req['data'], array(
             
'ws.op' => 'move',
             
'list_link' => $this->different_list->self_link,
             
'last_followup_message_number_sent' => $this->last_followup_message_number_sent));

         
$req $this->adapter->requestsMade[1];
         
$this->assertEquals($req['method'], 'GET');
         
$this->assertEquals($req['uri'], '/accounts/1/lists/505454/subscribers/3');
     }

}

class 
TestGettingEntryParentEntry extends PHPUnit_Framework_TestCase {

    public function 
setUp() {
        
$this->adapter get_mock_adapter();
        
$url '/accounts/1/lists/303449';
        
$data $this->adapter->request('GET'$url);
        
$this->list = new AWeberEntry($data$url$this->adapter);
        
$url '/accounts/1';
        
$data $this->adapter->request('GET'$url);
        
$this->account = new AWeberEntry($data$url$this->adapter);
        
$url '/accounts/1/lists/303449/custom_fields/1';
        
$data $this->adapter->request('GET'$url);
        
$this->customField = new AWeberEntry($data$url$this->adapter);
    }

    public function 
testListParentShouldBeAccount() {
        
$entry $this->list->getParentEntry();
        
$this->assertTrue(is_a($entry'AWeberEntry'));
        
$this->assertEquals($entry->type'account');
    }

    public function 
testCustomFieldParentShouldBeList() {
        
$entry $this->customField->getParentEntry();
        
$this->assertTrue(is_a($entry'AWeberEntry'));
        
$this->assertEquals($entry->type'list');
    }

    public function 
testAccountParentShouldBeNULL() {
        
$entry $this->account->getParentEntry();
        
$this->assertEquals($entryNULL);
    }
}
Онлайн: 1
Реклама