/* * RepositoryTests.vala * * Unit tests for feed and subscription repositories. */ using Gio = Org.Gnome.Valetta.Gio; public class RSSuper.RepositoryTests { public static int main(string[] args) { var tests = new RepositoryTests(); tests.test_feed_repository_get_items(); tests.test_feed_repository_get_item_by_id(); tests.test_feed_repository_insert_item(); tests.test_feed_repository_insert_items(); tests.test_feed_repository_update_item(); tests.test_feed_repository_mark_as_read(); tests.test_feed_repository_mark_as_starred(); tests.test_feed_repository_delete_item(); tests.test_feed_repository_get_unread_count(); tests.test_subscription_repository_get_all(); tests.test_subscription_repository_get_enabled(); tests.test_subscription_repository_get_by_category(); tests.test_subscription_repository_get_by_id(); tests.test_subscription_repository_get_by_url(); tests.test_subscription_repository_insert(); tests.test_subscription_repository_update(); tests.test_subscription_repository_delete(); tests.test_subscription_repository_set_enabled(); tests.test_subscription_repository_set_error(); tests.test_subscription_repository_update_timestamps(); print("All repository tests passed!\n"); return 0; } public void test_feed_repository_get_items() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var state = new State(); repo.get_feed_items(null, (s) => { state.set_success(db.getFeedItems(null)); }); assert(state.is_loading() == true); assert(state.is_success() == false); assert(state.is_error() == false); print("PASS: test_feed_repository_get_items\n"); } public void test_feed_repository_get_item_by_id() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = db.create_feed_item( id: "test-item-1", title: "Test Item", url: "https://example.com/article/1" ); var result = repo.get_feed_item_by_id("test-item-1"); assert(result != null); assert(result.id == "test-item-1"); assert(result.title == "Test Item"); print("PASS: test_feed_repository_get_item_by_id\n"); } public void test_feed_repository_insert_item() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = FeedItem.new( id: "test-item-2", title: "New Item", url: "https://example.com/article/2", published_at: Time.now() ); var result = repo.insert_feed_item(item); assert(result.is_error() == false); var retrieved = repo.get_feed_item_by_id("test-item-2"); assert(retrieved != null); assert(retrieved.id == "test-item-2"); print("PASS: test_feed_repository_insert_item\n"); } public void test_feed_repository_insert_items() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var items = new FeedItem[2]; items[0] = FeedItem.new( id: "test-item-3", title: "Item 1", url: "https://example.com/article/3", published_at: Time.now() ); items[1] = FeedItem.new( id: "test-item-4", title: "Item 2", url: "https://example.com/article/4", published_at: Time.now() ); var result = repo.insert_feed_items(items); assert(result.is_error() == false); var all_items = repo.get_feed_items(null); assert(all_items.length == 2); print("PASS: test_feed_repository_insert_items\n"); } public void test_feed_repository_update_item() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = db.create_feed_item( id: "test-item-5", title: "Original Title", url: "https://example.com/article/5" ); item.title = "Updated Title"; var result = repo.update_feed_item(item); assert(result.is_error() == false); var updated = repo.get_feed_item_by_id("test-item-5"); assert(updated != null); assert(updated.title == "Updated Title"); print("PASS: test_feed_repository_update_item\n"); } public void test_feed_repository_mark_as_read() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = db.create_feed_item( id: "test-item-6", title: "Read Item", url: "https://example.com/article/6" ); var result = repo.mark_as_read("test-item-6", true); assert(result.is_error() == false); var unread = repo.get_unread_count(null); assert(unread == 0); print("PASS: test_feed_repository_mark_as_read\n"); } public void test_feed_repository_mark_as_starred() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = db.create_feed_item( id: "test-item-7", title: "Starred Item", url: "https://example.com/article/7" ); var result = repo.mark_as_starred("test-item-7", true); assert(result.is_error() == false); print("PASS: test_feed_repository_mark_as_starred\n"); } public void test_feed_repository_delete_item() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var item = db.create_feed_item( id: "test-item-8", title: "Delete Item", url: "https://example.com/article/8" ); var result = repo.delete_feed_item("test-item-8"); assert(result.is_error() == false); var deleted = repo.get_feed_item_by_id("test-item-8"); assert(deleted == null); print("PASS: test_feed_repository_delete_item\n"); } public void test_feed_repository_get_unread_count() { var db = new Database(":memory:"); var repo = new FeedRepositoryImpl(db); var count = repo.get_unread_count(null); assert(count == 0); print("PASS: test_feed_repository_get_unread_count\n"); } public void test_subscription_repository_get_all() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var state = new State(); repo.get_all_subscriptions((s) => { state.set_success(db.getAllSubscriptions()); }); assert(state.is_loading() == true); assert(state.is_success() == false); print("PASS: test_subscription_repository_get_all\n"); } public void test_subscription_repository_get_enabled() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var state = new State(); repo.get_enabled_subscriptions((s) => { state.set_success(db.getEnabledSubscriptions()); }); assert(state.is_loading() == true); assert(state.is_success() == false); print("PASS: test_subscription_repository_get_enabled\n"); } public void test_subscription_repository_get_by_category() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var state = new State(); repo.get_subscriptions_by_category("technology", (s) => { state.set_success(db.getSubscriptionsByCategory("technology")); }); assert(state.is_loading() == true); assert(state.is_success() == false); print("PASS: test_subscription_repository_get_by_category\n"); } public void test_subscription_repository_get_by_id() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-1", url: "https://example.com/feed.xml", title: "Test Subscription" ); var result = repo.get_subscription_by_id("test-sub-1"); assert(result != null); assert(result.id == "test-sub-1"); print("PASS: test_subscription_repository_get_by_id\n"); } public void test_subscription_repository_get_by_url() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-2", url: "https://example.com/feed.xml", title: "Test Subscription" ); var result = repo.get_subscription_by_url("https://example.com/feed.xml"); assert(result != null); assert(result.url == "https://example.com/feed.xml"); print("PASS: test_subscription_repository_get_by_url\n"); } public void test_subscription_repository_insert() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = FeedSubscription.new( id: "test-sub-3", url: "https://example.com/feed.xml", title: "New Subscription", enabled: true ); var result = repo.insert_subscription(subscription); assert(result.is_error() == false); var retrieved = repo.get_subscription_by_id("test-sub-3"); assert(retrieved != null); assert(retrieved.id == "test-sub-3"); print("PASS: test_subscription_repository_insert\n"); } public void test_subscription_repository_update() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-4", url: "https://example.com/feed.xml", title: "Original Title" ); subscription.title = "Updated Title"; var result = repo.update_subscription(subscription); assert(result.is_error() == false); var updated = repo.get_subscription_by_id("test-sub-4"); assert(updated != null); assert(updated.title == "Updated Title"); print("PASS: test_subscription_repository_update\n"); } public void test_subscription_repository_delete() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-5", url: "https://example.com/feed.xml", title: "Delete Subscription" ); var result = repo.delete_subscription("test-sub-5"); assert(result.is_error() == false); var deleted = repo.get_subscription_by_id("test-sub-5"); assert(deleted == null); print("PASS: test_subscription_repository_delete\n"); } public void test_subscription_repository_set_enabled() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-6", url: "https://example.com/feed.xml", title: "Toggle Subscription" ); var result = repo.set_enabled("test-sub-6", false); assert(result.is_error() == false); var updated = repo.get_subscription_by_id("test-sub-6"); assert(updated != null); assert(updated.enabled == false); print("PASS: test_subscription_repository_set_enabled\n"); } public void test_subscription_repository_set_error() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-7", url: "https://example.com/feed.xml", title: "Error Subscription" ); var result = repo.set_error("test-sub-7", "Connection failed"); assert(result.is_error() == false); print("PASS: test_subscription_repository_set_error\n"); } public void test_subscription_repository_update_timestamps() { var db = new Database(":memory:"); var repo = new SubscriptionRepositoryImpl(db); var subscription = db.create_subscription( id: "test-sub-8", url: "https://example.com/feed.xml", title: "Timestamp Test" ); var last_fetched = Time.now().unix_timestamp; var next_fetch = Time.now().unix_timestamp + 3600; var result = repo.update_last_fetched_at("test-sub-8", last_fetched); var result2 = repo.update_next_fetch_at("test-sub-8", next_fetch); assert(result.is_error() == false); assert(result2.is_error() == false); print("PASS: test_subscription_repository_update_timestamps\n"); } }