Some checks failed
CI - Multi-Platform Native / Build iOS (RSSuper) (push) Has been cancelled
CI - Multi-Platform Native / Build macOS (push) Has been cancelled
CI - Multi-Platform Native / Build Android (push) Has been cancelled
CI - Multi-Platform Native / Build Linux (push) Has been cancelled
CI - Multi-Platform Native / Integration Tests (push) Has been cancelled
CI - Multi-Platform Native / Build Summary (push) Has been cancelled
424 lines
14 KiB
Vala
424 lines
14 KiB
Vala
/*
|
|
* 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<FeedItem[]>();
|
|
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<FeedSubscription[]>();
|
|
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<FeedSubscription[]>();
|
|
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<FeedSubscription[]>();
|
|
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");
|
|
}
|
|
}
|