status_stub = $this->getMockBuilder('AmberStatus')->disableOriginalConstructor()->getMock();
$this->checker_stub = $this->getMockBuilder('AmberChecker')->disableOriginalConstructor()->getMock();
$this->fetcher_stub = $this->getMockBuilder('AmberFetcher')->disableOriginalConstructor()->getMock();
$this->fetcher_stub->method('fetch')->willReturn(array('id' => '0a137b375cc3881a70e186ce2172c8d1'));
Amber::set_status($this->status_stub);
Amber::set_checker($this->checker_stub);
Amber::set_fetcher($this->fetcher_stub);
parent::setUp();
}
function test_extract_one_link() {
$this->checker_stub->method('check')->willReturn(
array(
'id' => '0a137b375cc3881a70e186ce2172c8d1',
'url' => 'http://fox.com',
'last_checked' => 1395590225,
'next_check' => 1395590225 + 100000,
'status' => 1,
'message' => NULL,
)
);
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(1, count($result));
$this->assertContains("http://fox.com", array_keys($result));
}
function test_extract_two_links() {
$map = array(
array(array('url' => 'http://fox.com'), true, array( 'status' => 1)),
array(array('url' => 'http://dog.com'), true, array( 'status' => 1)),
);
$this->checker_stub->method('check')->will($this->returnValueMap($map));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertContains("http://fox.com", array_keys($result));
$this->assertContains("http://dog.com", array_keys($result));
}
function test_extract_one_link_https() {
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(1, count($result));
$this->assertContains("https://fox.com", array_keys($result));
}
function test_extract_ignore_relative_links() {
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(0, count($result));
}
function test_extract_links_with_attributes() {
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(1, count($result));
$this->assertContains("http://fox.com/fox", array_keys($result));
}
function test_extract_one_link_different_quotes() {
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(1, count($result));
$this->assertContains("https://fox.com", array_keys($result));
}
function test_extract_one_link_funny_chars() {
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown URL with uncommon chars
jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(1, count($result));
$this->assertContains("http://www.lagrandeepicerie.fr/#e-boutique/Les_produits_du_moment,2/coffret_vins_doux_naturels,149", array_keys($result));
}
function test_extract_excluded_site() {
update_option('amber_options', array('amber_excluded_sites' => "yahoo.com"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals("", $result["http://yahoo.com"]);
$this->assertEquals(1, $result["http://dog.com"]);
}
function test_extract_excluded_site_with_path() {
update_option('amber_options', array('amber_excluded_sites' => "yahoo.com"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals("", $result["http://yahoo.com/fox"]);
$this->assertEquals(1, $result["http://dog.com"]);
}
function test_extract_excluded_site_substring() {
update_option('amber_options', array('amber_excluded_sites' => "yahoo.com"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals("", $result["http://yahoo.com/fox"]);
$this->assertEquals("", $result["http://dog.com/yahoo.com"]);
}
function test_extract_excluded_site_substring_not_allows() {
update_option('amber_options', array('amber_excluded_sites' => "yahoo.com$"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals(1, $result["http://yahoo.com/fox"]);
$this->assertEquals("", $result["http://dog.com/yahoo.com"]);
}
function test_extract_excluded_site_another_regexp() {
update_option('amber_options', array('amber_excluded_sites' => "com/exclude"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals("", $result["http://yahoo.com/exclude/bananas"]);
$this->assertEquals(1, $result["http://dog.com/yahoo.com"]);
}
function test_extract_excluded_site_bad_regexp() {
update_option('amber_options', array('amber_excluded_sites' => "*yahoo.com"));
$this->checker_stub->method('check')->willReturn( array( 'status' => 1));
$post_id = $this->factory->post->create(array(
'post_content' => 'The quick brown fox jumped over the lazy dog',
));
/* This will emit warning messages, but they can be ignored */
$result = Amber::extract_links($post_id, true);
$this->assertEquals(2, count($result));
$this->assertEquals(1, $result["http://yahoo.com/"]);
$this->assertEquals(1, $result["http://dog.com/yahoo.com"]);
}
}