import TopicTrackingState from "discourse/models/topic-tracking-state"; import createStore from "helpers/create-store"; import Category from "discourse/models/category"; QUnit.module("model:topic-tracking-state"); QUnit.test("sync", function(assert) { const state = TopicTrackingState.create(); state.states["t111"] = { last_read_post_number: null }; state.updateSeen(111, 7); const list = { topics: [ { highest_post_number: null, id: 111, unread: 10, new_posts: 10 } ] }; state.sync(list, "new"); assert.equal( list.topics.length, 0, "expect new topic to be removed as it was seen" ); }); QUnit.test("subscribe to category", function(assert) { const store = createStore(); const darth = store.createRecord("category", { id: 1, slug: "darth" }), luke = store.createRecord("category", { id: 2, slug: "luke", parentCategory: darth }), categoryList = [darth, luke]; sandbox.stub(Category, "list").returns(categoryList); const state = TopicTrackingState.create(); state.trackIncoming("c/darth/1/l/latest"); state.notify({ message_type: "new_topic", topic_id: 1, payload: { category_id: 2, topic_id: 1 } }); state.notify({ message_type: "new_topic", topic_id: 2, payload: { category_id: 3, topic_id: 2 } }); state.notify({ message_type: "new_topic", topic_id: 3, payload: { category_id: 1, topic_id: 3 } }); assert.equal( state.get("incomingCount"), 2, "expect to properly track incoming for category" ); state.resetTracking(); state.trackIncoming("c/darth/luke/2/l/latest"); state.notify({ message_type: "new_topic", topic_id: 1, payload: { category_id: 2, topic_id: 1 } }); state.notify({ message_type: "new_topic", topic_id: 2, payload: { category_id: 3, topic_id: 2 } }); state.notify({ message_type: "new_topic", topic_id: 3, payload: { category_id: 1, topic_id: 3 } }); assert.equal( state.get("incomingCount"), 1, "expect to properly track incoming for subcategory" ); });