require 'test/unit'
require 'article'
require 'rubygems'
require_gem 'flexmock'
class Article
attr_accessor :mock
def createConnection
return @mock
end
end
class TestArticle < Test::Unit::TestCase
def setup
@article = Article.new
@year, @month = 2004,5
@url_base = 'http://www.linux-magazin.de' + \
'/Artikel/ausgabe/' + sprintf('%s/%02d', @year, @month)
@no_content = 'keine verwertbaren Daten'
@html = <
Aktuell: News aus der Linux-Welt
Userspace-Dateisyteme
html
end
def test_parse_articles_no_content
assert_nil(@article.parse_articles(@no_content))
end
def test_parse_articles
result = @article.parse_articles(@html)
assert_instance_of(Array, result)
assert_equal(2, result.length, 'falsche Anzahl an Artikeln')
end
def test_load_article_page
mock = FlexMock.new
mock.mock_handle(:get) { [nil, 'testhtml'] }
@article.mock = mock
html = @article.load_article_page(@year, @month)
assert_equal('testhtml', html)
end
def test_load_article_page_network_error
mock = FlexMock.new
mock.mock_handle(:get) { raise SocketError, 'Netzwerkfehler' }
@article.mock = mock
assert_raise(SocketError) { @article.load_article_page(@year,@month) }
end
def test_get_address
url = @article.send(:get_address, @year, @month, 'suffix')
assert_equal(@url_base + 'suffix', url)
end
def test_read_articles
mock = FlexMock.new
mock.mock_handle(:get) { |param|
assert_equal(@url_base + '/index_html?print=y', param, 'Falsche URL')
[nil, @html]
}
@article.mock = mock
result = @article.read_articles(@year, @month)
assert_equal('Userspace-Dateisyteme',result[1][0])
assert_equal(@url_base + '/userspace/userspace.html',result[1][1])
assert_equal(2, result.length, 'falsche Anzahl an Artikeln')
end
def test_read_articles_no_content
mock = FlexMock.new
mock.mock_handle(:get) { [nil, @no_content] }
@article.mock = mock
assert_nothing_raised { @article.read_articles(@year, @month) }
assert_instance_of(String, @article.read_articles(@year, @month))
end
def test_read_articles_network_error
mock = FlexMock.new
mock.mock_handle(:get) { raise SocketError, 'simulierter Netzwerkfehler' }
@article.mock = mock
assert_nothing_raised { @article.read_articles(@year, @month) }
assert_instance_of(String, @article.read_articles(@year, @month))
end
end