# migrations

dir: embeddings_queue
filename: 00001-embeddings.sqlite.sql
hash: d3755dfd232be8e8301f4d7fcfb3a486
sql:
CREATE TABLE embeddings_queue (
    seq_id INTEGER PRIMARY KEY,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    operation INTEGER NOT NULL,
    topic TEXT NOT NULL,
    id TEXT NOT NULL,
    vector BLOB,
    encoding TEXT,
    metadata TEXT
);


dir: sysdb
filename: 00001-collections.sqlite.sql
hash: 38352d725ad1c16074fac420b22b4633
sql:
CREATE TABLE collections (
    id TEXT PRIMARY KEY,
    name TEXT NOT NULL,
    topic TEXT NOT NULL,
    UNIQUE (name)
);

CREATE TABLE collection_metadata (
    collection_id TEXT REFERENCES collections(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (collection_id, key)
);


dir: sysdb
filename: 00002-segments.sqlite.sql
hash: 2913cb6a503055a95f625448037e8912
sql:
CREATE TABLE segments (
    id TEXT PRIMARY KEY,
    type TEXT NOT NULL,
    scope TEXT NOT NULL,
    topic TEXT,
    collection TEXT REFERENCES collection(id)
);

CREATE TABLE segment_metadata (
    segment_id TEXT  REFERENCES segments(id) ON DELETE CASCADE,
    key TEXT NOT NULL,
    str_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (segment_id, key)
);


dir: sysdb
filename: 00004-tenants-databases.sqlite.sql
hash: 048867ce8fcdefe4023c7110e4433591
sql:
CREATE TABLE IF NOT EXISTS tenants (
    id TEXT PRIMARY KEY,
    UNIQUE (id)
);

CREATE TABLE IF NOT EXISTS databases (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per tenant
    tenant_id TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE,
    UNIQUE (tenant_id, name) -- Ensure that a tenant has only one database with a given name
);

CREATE TABLE IF NOT EXISTS collections_tmp (
    id TEXT PRIMARY KEY, -- unique globally
    name TEXT NOT NULL, -- unique per database
    topic TEXT NOT NULL,
    dimension INTEGER,
    database_id TEXT NOT NULL REFERENCES databases(id) ON DELETE CASCADE,
    UNIQUE (name, database_id)
);

-- Create default tenant and database
INSERT OR REPLACE INTO tenants (id) VALUES ('default_tenant'); -- The default tenant id is 'default_tenant' others are UUIDs
INSERT OR REPLACE INTO databases (id, name, tenant_id) VALUES ('00000000-0000-0000-0000-000000000000', 'default_database', 'default_tenant');

INSERT OR REPLACE INTO collections_tmp (id, name, topic, dimension, database_id)
    SELECT id, name, topic, dimension, '00000000-0000-0000-0000-000000000000' FROM collections;
DROP TABLE collections;
ALTER TABLE collections_tmp RENAME TO collections;


dir: metadb
filename: 00001-embedding-metadata.sqlite.sql
hash: 2b4cf52c4bb2676e21d6860a4409f856
sql:
CREATE TABLE embeddings (
    id INTEGER PRIMARY KEY,
    segment_id TEXT NOT NULL,
    embedding_id TEXT NOT NULL,
    seq_id BLOB NOT NULL,
    created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    UNIQUE (segment_id, embedding_id)
);

CREATE TABLE embedding_metadata (
    id INTEGER REFERENCES embeddings(id),
    key TEXT NOT NULL,
    string_value TEXT,
    int_value INTEGER,
    float_value REAL,
    PRIMARY KEY (id, key)
);

CREATE TABLE max_seq_id (
    segment_id TEXT PRIMARY KEY,
    seq_id BLOB NOT NULL
);

CREATE VIRTUAL TABLE embedding_fulltext USING fts5(id, string_value);


dir: metadb
filename: 00002-embedding-metadata.sqlite.sql
hash: 12a570f7121b3a8ce750a2a7c36da20f
sql:
-- SQLite does not support adding check with alter table, as a result, adding a check
-- involve creating a new table and copying the data over. It is over kill with adding
-- a boolean type column. The application write to the table needs to ensure the data
-- integrity.
ALTER TABLE embedding_metadata ADD COLUMN bool_value INTEGER


dir: metadb
filename: 00003-full-text-tokenize.sqlite.sql
hash: f97ad6334aeaa8f419f01110b648b97a
sql:
CREATE VIRTUAL TABLE embedding_fulltext_search USING fts5(string_value, tokenize='trigram');
INSERT INTO embedding_fulltext_search (rowid, string_value) SELECT rowid, string_value FROM embedding_metadata;
DROP TABLE embedding_fulltext;


# embeddings_queue

created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 9fa74d04-f47d-4d17-8602-70f2d7deb078
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "National Health Profile 2009 v\nIndia: Country Overview\nIndia comprising 28 states (Provinces) and 07 union \nterritories, is one of the oldest civilizations in the \nworld with a kaleidoscopic variety and rich cultural \nheritage.\nArea \u2013 it covers an area of 32,87,2631 sq km, \nextending from the snow-covered Himalayan \nheights to the tropical rain forests of the south. \nBounded by the great Himalayas in the north, it \nstretches southwards and at the tropic of cancer,"}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ea7eb66b-4cc5-438e-8154-0e4d75846272
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "tapers off into the Indian Ocean between the Bay \nof Bengal on the east and the Arabian Sea on the \nwest.\nLocation \u2013 lying entirely in the northern \nhemisphere, the mainland extends between \nlatitudes 8\u00b04\u2019 and 37\u00b06\u2019 north, longitudes 68\u00b07\u2019 and \n97\u00b025\u2019 east, and measures about 3,214 km from \nnorth to south between the extreme latitudes and \nabout 2,933 km from east to west between the \nextreme longitudes. It has a land frontier of about \n15,200 km. The total length of the coastline of the"}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 3b45dd7e-6859-480e-825f-072ce9b29127
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "mainland, Lakshadweep Islands, and the Andaman \nand Nicobar Islands is 7,516.6 km.\nBoundaries \u2013 countries having a common border \nwith India are Afghanistan and Pakistan to the \nnorth-west, china, Bhutan and Nepal to the north, \nMyanmar to the east and Bangladesh to the east India: Country Overview of west Bengal. Sri Lanka is separated \nfrom India by a narrow channel of sea formed by the Palk Strait and the Gulf of Mannar."}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 54656586-a729-48f5-bedc-6880fcc47f8a
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "Physical diversity \u2013 the main land comprises of four regions, namely, the great mountain zone, plains of the \nGanga and the Indus, the desert region and the southern peninsula.\nThe Himalayas comprise three almost parallel ranges interspersed with large plateaus and valleys, which extends \nover a distance of about 2,400 km with a varying depth of 240 to 320 km in the northernmost part of the \ncountry."}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: e7ccd41c-d947-40f4-a4f0-c0ff23ba726a
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "country.\nThe plains of the Ganga and the Indus, about 2,400 km long and 240 to 320 km broad, are formed by basins of \nthree distinct river systems \u2013 the Indus, the Ganga and the Brahmaputra. They are one of the world\u2019s greatest \nstretches of flat alluvium and also one of the most densely populated areas on the earth.\nThe desert region in the western part comprise of the great desert extending from the edge of the Rann of"}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 5cb703b1-181c-4367-bfd2-776b1d8ca2b0
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "kuchh beyond the Luni River northward including the whole of the Rajasthan-Sind frontier. While the little desert \nextends from the luni between Jaisalmer and Jodhpur up to the northern wastes. Between the great and the little \ndeserts lies a zone of absolutely sterile country, consisting of rocky land cut up by limestone ridges.\nThe peninsular plateau is marked by a mass of mountain and hill ranges varying from 460 to 1,220 meters in"}


created_at: 2026-04-02 05:56:28
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 71441fda-3aa3-4c44-845f-fab4ba01c0cf
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "919", "lesson_id": "1199", "content_id": "1757", "file_name": "testfile file file_v1.pdf", "chroma:document": "height. Prominent among these are the Aravalli, Vindhya, Satpura, Maikala and Ajanta, flanked by the Eastern \nGhats with average elevation is about 610 meters, and the Western Ghats where it is generally from 915 to 1,220 \nmeters, rising in places to over 2,440 meters."}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: a168eb33-24bd-454f-8e53-b0f04c554865
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "[Type here] \n \nTypes of Test Cases: \n \nUnit Testing \nUnit testing verifies a single function or method in isolation to ensure it works correctly. \n  Example: Testing one function\u2019s logic without database, API, or UI. \n \nIntegration Testing \nIntegration testing verifies multiple functions or modules working together, where one function may call another \nfunction or interact with external components like a database."}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: b9bc37e4-8511-4b52-82e5-75c0c1320b50
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Example: Testing a function that internally calls another function and processes combined results. \n \nFunctional Testing \nFunctional testing verifies the complete feature or page behavior, ensuring the system performs as expected from \nthe user\u2019s perspective. \n  Example: Testing a full page or API endpoint that processes user input and returns output. \n \n \nSpringBoot Test Cases: \n \nReferences (BEST LEARNING LINKS) \n     Official Docs \n   Spring Boot Testing"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0576b4ba-510e-4e1f-ae4f-46a6386a3ca4
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Official Docs \n   Spring Boot Testing \nhttps://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing \n     Baeldung (Highly Recommended) \n   Controller Testing \nhttps://www.baeldung.com/spring-boot-testing \n   MockMvc \nhttps://www.baeldung.com/spring-mvc-test-examples \n          YouTube (Easy) \n\u2022 Search: \u201cSpring Boot MockMvc tutorial\u201d \n\u2022 Channel: Java Brains / Amigoscode \nRecommended Approach for LMS Project  [Type here] \n \nLayer Testing Tool Notes"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 6b2f3d0c-13c4-4f5e-b5c0-10e817aa2430
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Layer Testing Tool Notes \nController / API MockMvc Fast, mock dependencies \nService JUnit + Mockito Test business logic without HTTP \nRepository @DataJpaTest Test DB queries with H2 \nFull App Flow @SpringBootTest End-to-end integration \n \nUnit Test Cases \n \n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557 \n\u2551                    CONTROLLER TESTING QUICK REFERENCE                        \u2551 \n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 00d489d8-c572-46e8-aff9-74c851b3c6f7
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 1. TEST CLASS SETUP                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n@ExtendWith(MockitoExtension.class)  \u2190 Add this to every test class \nclass YourControllerTest { \n     \n    @Mock                                \u2190 Fake version of dependency \n    private YourService service;"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 8aaaeebd-4f7f-4f94-b291-fb53249c6379
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "private YourService service; \n     \n    @InjectMocks                         \u2190 Real controller with fake dependencies \n    private YourController controller; \n     \n    @Test                                \u2190 This marks a test method \n    void testSomething() { } \n} \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 2. THE AAA PATTERN (Use in Every Test)                                      \u2502  [Type here]"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 78c34538-6341-4537-9908-9595bae03eb9
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n@Test \nvoid testMethod_Success() { \n     \n    // ===== ARRANGE ===== (Set up) \n    when(service.getData()).thenReturn(data); \n     \n    // ===== ACT ===== (Execute) \n    ResponseEntity<?> response = controller.method(); \n     \n    // ===== ASSERT ===== (Check) \n    assertEquals(HttpStatus.OK, response.getStatusCode()); \n     \n    // ===== VERIFY ===== (Confirm method calls)"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: dbbf3f59-69bb-4aac-81d1-d127e1b8484f
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// ===== VERIFY ===== (Confirm method calls) \n    verify(service, times(1)).getData(); \n} \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 3. MOCKITO PATTERNS                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: c6d7f2b2-5809-4e47-9892-9110f11d81ad
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 Pattern                     \u2502 When to Use                                  \u2502 \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \n\u2502 when().thenReturn()         \u2502 Method returns a value                       \u2502 \n\u2502 when().thenThrow()          \u2502 Method throws exception                      \u2502 \n\u2502 doNothing().when()          \u2502 Method returns void                          \u2502 \n\u2502 any()                       \u2502 Any argument of any type                     \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 62ca251a-4970-4a14-a4a1-3d87b15e7c5b
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 anyLong()                   \u2502 Any Long argument                            \u2502 \n\u2502 anyString()                 \u2502 Any String argument                          \u2502  [Type here] \n \n\u2502 eq(value)                   \u2502 Specific value (with any())                  \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nExamples: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 557f234e-39af-4332-a0d7-99b05f3e5e6c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 when(service.findById(1L)).thenReturn(user);                                 \u2502 \n\u2502 when(service.findById(any())).thenReturn(user);                              \u2502 \n\u2502 when(service.save(any())).thenThrow(new RuntimeException());                 \u2502 \n\u2502 doNothing().when(service).delete(1L);                                        \u2502 \n\u2502 when(service.update(eq(1L), any())).thenReturn(updated);                     \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 4d722287-84e8-4d8d-9d64-c2399244a9ab
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 4. COMMON ASSERTIONS                                                         \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 Assertion                           \u2502 What it Checks                         \u2502 \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 50249a4a-ef32-440a-af31-1bff8e97cd3b
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 assertEquals(expected, actual)      \u2502 Two values are equal                   \u2502 \n\u2502 assertNotNull(object)               \u2502 Object is not null                     \u2502 \n\u2502 assertTrue(condition)               \u2502 Condition is true                      \u2502 \n\u2502 assertFalse(condition)              \u2502 Condition is false                     \u2502 \n\u2502 assertThrows(Exception.class, ...)  \u2502 Code throws exception                  \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: fc1e83ee-a18c-49da-b405-d199ec4d4124
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Examples: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 assertEquals(HttpStatus.OK, response.getStatusCode());                       \u2502 \n\u2502 assertNotNull(response.getBody());                                           \u2502 \n\u2502 assertEquals(\"John\", user.getName());                                        \u2502  [Type here] \n \n\u2502 assertTrue(list.isEmpty());                                                  \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 9a5d7b24-8e8c-419c-8bfd-0bfb4285e215
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 5. VERIFY METHOD CALLS                                                       \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 verify(service, times(1)).method();     \u2190 Called exactly once                \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: c60aa80f-c66c-4334-ae75-c2ed4368d306
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 verify(service, times(2)).method();     \u2190 Called exactly twice               \u2502 \n\u2502 verify(service, never()).method();      \u2190 Never called                       \u2502 \n\u2502 verify(service, atLeast(1)).method();   \u2190 Called at least once               \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 6. TEST SCENARIOS (Write These for Every Method)                            \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 14e32ab1-3b9a-4a9e-89b7-e681272d635e
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nFor a GET method: \n\u251c\u2500\u2500    testGetMethod_Success          (Returns 200 OK with data) \n\u251c\u2500\u2500    testGetMethod_NotFound         (Returns 404 when not found) \n\u251c\u2500\u2500    testGetMethod_Error            (Returns 500 on exception) \n\u2514\u2500\u2500    testGetMethod_EmptyData        (Returns 200 with empty list) \n \nFor a POST method: \n\u251c\u2500\u2500    testPostMethod_Success         (Returns 201 CREATED)"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 68d6d670-a327-4669-b75c-7b8879d8673f
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u251c\u2500\u2500    testPostMethod_BadRequest      (Returns 400 for invalid data) \n\u251c\u2500\u2500    testPostMethod_Error           (Returns 500 on exception) \n\u2514\u2500\u2500    testPostMethod_Duplicate       (Returns 409 if already exists) \n \nFor a DELETE method:  [Type here] \n \n\u251c\u2500\u2500    testDeleteMethod_Success       (Returns 200 OK) \n\u251c\u2500\u2500    testDeleteMethod_NotFound      (Returns 404) \n\u2514\u2500\u2500    testDeleteMethod_Error         (Returns 500 on exception)"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: b9b2fc1f-da14-4dcb-a15b-240e3e029fa1
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 7. RUNNING TESTS                                                             \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nCommand Line: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 mvn test                              \u2190 Run all tests                        \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 16afc3fa-6269-4bbe-a78c-9ebe31afadca
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 mvn test -Dtest=YourControllerTest    \u2190 Run specific test class             \u2502 \n\u2502 mvn test -Dtest=YourControllerTest#testMethod  \u2190 Run specific test method   \u2502 \n\u2502 mvn clean test jacoco:report          \u2190 Run with coverage report            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nIDE: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 Right-click test file \u2192 Run 'YourControllerTest'                            \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 48da732f-6a3c-4369-97fc-801450ec8c22
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 Right-click test method \u2192 Run 'testMethod'                                  \u2502 \n\u2502 Click green play button next to test                                        \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 8. TEST NAMING CONVENTION                                                    \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: fa9e5749-7ab4-4b83-986a-96648a0c59a2
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Format: test[MethodName]_[Scenario] \n \nExamples: \n\u251c\u2500\u2500 testGetUser_Success  [Type here] \n \n\u251c\u2500\u2500 testGetUser_NotFound \n\u251c\u2500\u2500 testGetUser_Error \n\u251c\u2500\u2500 testCreateUser_Success \n\u251c\u2500\u2500 testCreateUser_ValidationError \n\u251c\u2500\u2500 testDeleteUser_Success \n\u2514\u2500\u2500 testDeleteUser_NotFound \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 9. COMPLETE EXAMPLE                                                          \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 5c098ea3-09ea-4ab9-995d-0b5336ebf1ad
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nController: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 @GetMapping(\"/user/{id}\")                                                    \u2502 \n\u2502 public ResponseEntity<User> getUser(@PathVariable Long id) {                \u2502 \n\u2502     User user = userService.findById(id);                                   \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0425c993-cdb2-48d4-890d-0886bc28591e
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502     return ResponseEntity.ok(user);                                         \u2502 \n\u2502 }                                                                            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nTest: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 @ExtendWith(MockitoExtension.class)                                         \u2502 \n\u2502 class UserControllerTest {                                                  \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 7fc21485-eebf-4687-a965-96d4cf1da1c7
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502                                                                              \u2502 \n\u2502     @Mock                                                                    \u2502 \n\u2502     private UserService userService;                                        \u2502 \n\u2502                                                                              \u2502 \n\u2502     @InjectMocks                                                             \u2502 \n\u2502     private UserController userController;                                  \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ca246294-abf4-402f-9981-bea3771948f2
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502                                                                              \u2502  [Type here] \n \n\u2502     @Test                                                                    \u2502 \n\u2502     void testGetUser_Success() {                                            \u2502 \n\u2502         // ARRANGE                                                           \u2502 \n\u2502         Long userId = 1L;                                                    \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: cb0760e2-f678-4bc9-a8af-9ee125a52acc
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502         User expectedUser = new User(1L, \"John\");                           \u2502 \n\u2502         when(userService.findById(userId)).thenReturn(expectedUser);        \u2502 \n\u2502                                                                              \u2502 \n\u2502         // ACT                                                               \u2502 \n\u2502         ResponseEntity<User> response = userController.getUser(userId);     \u2502 \n\u2502                                                                              \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 04cde302-84e6-4ced-b0dc-9973bbf2766a
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502         // ASSERT                                                            \u2502 \n\u2502         assertEquals(HttpStatus.OK, response.getStatusCode());              \u2502 \n\u2502         assertEquals(\"John\", response.getBody().getName());                 \u2502 \n\u2502                                                                              \u2502 \n\u2502         // VERIFY                                                            \u2502 \n\u2502         verify(userService, times(1)).findById(userId);                     \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: e31e936d-d7fd-4b0a-9318-e0d30860430c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502     }                                                                        \u2502 \n\u2502 }                                                                            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 10. TROUBLESHOOTING                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 45a975be-a31b-4214-b07d-e229ab5f43cc
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Problem: Mocks don't work \n\u2514\u2500\u2500 Solution: Add @ExtendWith(MockitoExtension.class) \n \nProblem: NullPointerException in test \n\u2514\u2500\u2500 Solution: Did you mock the return value? when(service.method()).thenReturn(...) \n \nProblem: Test fails with \"wanted but not invoked\"  [Type here] \n \n\u2514\u2500\u2500 Solution: Check if method name and parameters match exactly \n \nProblem: Wrong number of invocations \n\u2514\u2500\u2500 Solution: Check verify() count matches actual method calls \n \nProblem: Can't use eq() and any() together"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: cf77d202-96cb-412e-9e62-87986e5d30b2
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Problem: Can't use eq() and any() together \n\u2514\u2500\u2500 Solution: If you use any() for one parameter, use eq() for specific values \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 11. CHECKLIST BEFORE SUBMITTING TESTS                                       \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u25a1 Test class has @ExtendWith(MockitoExtension.class) \n\u25a1 All dependencies are mocked with @Mock"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 12d16621-1e56-4c8f-ad4c-a230bc4c4cc7
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u25a1 All dependencies are mocked with @Mock \n\u25a1 Controller has @InjectMocks \n\u25a1 Success test case written \n\u25a1 Error test case written \n\u25a1 Edge cases covered \n\u25a1 All tests use AAA pattern \n\u25a1 Tests have descriptive names \n\u25a1 verify() statements added where needed \n\u25a1 All tests pass: mvn test \n\u25a1 No System.out.println() in tests \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 12. REMEMBER                                                                 \u2502"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: a092e548-3efa-4650-8eb6-7141d87f5f0f
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n       One test = One scenario \n          AAA Pattern = Arrange, Act, Assert \n   Mock = Fake object  [Type here] \n \n   Verify = Check method was called \n    Test success AND failure scenarios \n        Start simple, add complexity gradually \n \nIntegration Test cases: \n \nFile Placement \n1. Test Class \nsrc/test/java/com/britanica/pbl/controller/ \n\u2514\u2500\u2500 DomainControllerIntegrationTest.java \n2. Test Configuration"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: d2101e4e-2389-4492-8902-c5d1989fd41d
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "2. Test Configuration \nsrc/test/resources/ \n\u2514\u2500\u2500 application-test.properties \n \nStep 1: Add H2 Database Dependency \nAdd to your pom.xml: \n    <!-- H2 Database for Testing --> \n    <dependency> \n        <groupId>com.h2database</groupId> \n        <artifactId>h2</artifactId> \n        <scope>test</scope> \n    </dependency> \n \nRun All Integration Tests \nmvn test -Dtest=DomainControllerIntegrationTest \n \nSample Example: \n  [Type here] \n \n@SpringBootTest                 // \u2190 Loads full Spring context"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: f874948b-2894-4765-bd01-91455d867c62
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "@AutoConfigureMockMvc          // \u2190 Provides MockMvc for HTTP testing \n@Transactional                 // \u2190 Rollback after each test \nclass DomainControllerIntegrationTest { \n     \n    @Autowired \n    private MockMvc mockMvc;            // \u2190 Simulates HTTP requests \n     \n    @Autowired \n    private DomainRepository repository; // \u2190 Real repository \n     \n    @Test \n    @WithMockUser(authorities = \"Admin\") // \u2190 Mock security \n    void testListDomains_Success() throws Exception {"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 7481e46c-ffe9-42cc-b978-2556f0e6fa51
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// Insert REAL data into database \n        Domain domain = new Domain(); \n        domain.setDomainName(\"Test\"); \n        repository.save(domain);  // \u2190 Actually saves to H2 database \n         \n        // Make REAL HTTP request \n        mockMvc.perform(get(\"/domain/list\")) \n            .andExpect(status().isOk()) \n            .andExpect(jsonPath(\"$.domain\", hasSize(1))); \n    } \n} \n \nMockMvc Request Patterns \nGET Request  [Type here] \n \njava \nmockMvc.perform(get(\"/domain/list\")"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 6d67188f-344e-4869-8bf5-e0b012fcc132
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "java \nmockMvc.perform(get(\"/domain/list\") \n        .param(\"page\", \"0\") \n        .param(\"size\", \"10\") \n        .param(\"search\", \"test\") \n        .contentType(MediaType.APPLICATION_JSON)) \n    .andExpect(status().isOk()) \n    .andExpect(jsonPath(\"$.domain\").isArray()); \nPOST Request \njava \nmockMvc.perform(post(\"/domain/create\") \n        .contentType(MediaType.APPLICATION_JSON) \n        .content(jsonString)) \n    .andExpect(status().isCreated())"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 50e48e1d-8379-4f40-a8f2-5024d922e1cd
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": ".andExpect(status().isCreated()) \n    .andExpect(jsonPath(\"$.error\").value(\"false\")); \nPUT Request \njava \nmockMvc.perform(put(\"/domain/update\") \n        .contentType(MediaType.APPLICATION_JSON) \n        .content(jsonString)) \n    .andExpect(status().isOk()); \nDELETE Request \njava \nmockMvc.perform(delete(\"/domain/delete/{id}\", domainId) \n        .contentType(MediaType.APPLICATION_JSON)) \n    .andExpect(status().isOk()); \n \n    Common JSON Path Expressions \njava \n// Check string value"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: d65caf4a-5f52-4290-93e7-92063e2e77e0
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "java \n// Check string value \n.andExpect(jsonPath(\"$.error\").value(\"false\"))  [Type here] \n \n \n// Check boolean \n.andExpect(jsonPath(\"$.error\").value(false)) \n \n// Check number \n.andExpect(jsonPath(\"$.totalElements\").value(10)) \n \n// Check array size \n.andExpect(jsonPath(\"$.domain\", hasSize(5))) \n \n// Check array exists \n.andExpect(jsonPath(\"$.domain\").isArray()) \n \n// Check nested value \n.andExpect(jsonPath(\"$.domain[0].domainName\").value(\"Test\")) \n \n// Check exists"}


created_at: 2026-04-09 09:39:46
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 76ff88ec-2d2d-4aad-8005-78a905a681ea
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1779", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// Check exists \n.andExpect(jsonPath(\"$.message\").exists()) \n \n// Check doesn't exist \n.andExpect(jsonPath(\"$.error\").doesNotExist()) \n \n// Check not null \n.andExpect(jsonPath(\"$.domain\").isNotEmpty())"}


created_at: 2026-04-09 09:40:54
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ed840b83-2a21-4eca-b5bd-2c784a479455
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1780", "file_name": "video2_v1.mp4", "chroma:document": "After knowing about noun, it is important for us to know what is a pronoun. What is a pronoun? Why is it used? The pronoun is a word used in a place of one or more nouns. It may stand for a person, place, thing or idea. It refers to a person or thing without giving the name. The various kinds of pronouns are personal pronouns, indifinate pronouns, demonstrative pronouns and introgative pronouns. Now let us understand the usage of pronouns with examples. The word Rocky has a bicycle. He writes"}


created_at: 2026-04-09 09:40:54
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 4aafa803-cee4-400f-b6c1-c370a1f220d2
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1780", "file_name": "video2_v1.mp4", "chroma:document": "examples. The word Rocky has a bicycle. He writes it every day. The words he and it refer to in the second sentence are used for Rocky and bicycle. The words he used for Rocky and it used for bicycle are called pronouns. We use pronouns to avoid repetition of the same words, which in this case are Rocky and bicycle. Most of the pronouns must be used independently, that is, without a noun following them. Example, this is a big palace. This is a pronoun as it occurs independently. But when a noun"}


created_at: 2026-04-09 09:40:54
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 2ef77e4e-aa5b-4b79-a84e-2bed3c6406fd
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1780", "file_name": "video2_v1.mp4", "chroma:document": "as it occurs independently. But when a noun follows them, they are no longer pronouns. Example, this palace is big. This is followed by the noun Palace. Here this as a determiner describes the noun and so it is not a pronoun. We have understood what are nouns and pronouns. Now let us see what are adjectives. Adjectives add to the meaning of the nouns they are associated with. They tell us about the quantity, quality, size, color, number of the noun they go with. Adjectives usually answer one of"}


created_at: 2026-04-09 09:40:54
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: e583e753-7023-4314-8259-8d52cc3beb50
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1780", "file_name": "video2_v1.mp4", "chroma:document": "they go with. Adjectives usually answer one of the three questions about the noun they describe. What kind of? I found a red rose in the garden. What kind of rose? Red. How many? These soaps please. How many soaps? Three. Which one? I would eat these cakes. Which cakes? These. There are three types of adjectives. They are demonstrative, common and proper. Click on the buttons to know more. As we have reached an end of this unit, let us have a quick recap. In this unit we have learnt about"}


created_at: 2026-04-09 09:40:54
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0ea0d1b9-bdc5-44d7-87e8-35719234ca7c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "941", "lesson_id": "1221", "content_id": "1780", "file_name": "video2_v1.mp4", "chroma:document": "a quick recap. In this unit we have learnt about nouns, pronouns and adjectives. Click on each of these for a quick recap. This unit has enabled you to identify, a noun in the sentence, point out a pronoun and outline an adjective. Thank you for going through this unit. Hope the information presented was useful and will help you in your day-to-day work."}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 9291c89e-4408-4e8d-8212-5042c46a7070
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "[Type here] \n \nTypes of Test Cases: \n \nUnit Testing \nUnit testing verifies a single function or method in isolation to ensure it works correctly. \n  Example: Testing one function\u2019s logic without database, API, or UI. \n \nIntegration Testing \nIntegration testing verifies multiple functions or modules working together, where one function may call another \nfunction or interact with external components like a database."}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 12a83976-c97c-470d-a683-0df829f47b00
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Example: Testing a function that internally calls another function and processes combined results. \n \nFunctional Testing \nFunctional testing verifies the complete feature or page behavior, ensuring the system performs as expected from \nthe user\u2019s perspective. \n  Example: Testing a full page or API endpoint that processes user input and returns output. \n \n \nSpringBoot Test Cases: \n \nReferences (BEST LEARNING LINKS) \n     Official Docs \n   Spring Boot Testing"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 7ca0171b-2d0c-46e1-96cd-83338d6bc5a5
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Official Docs \n   Spring Boot Testing \nhttps://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing \n     Baeldung (Highly Recommended) \n   Controller Testing \nhttps://www.baeldung.com/spring-boot-testing \n   MockMvc \nhttps://www.baeldung.com/spring-mvc-test-examples \n          YouTube (Easy) \n\u2022 Search: \u201cSpring Boot MockMvc tutorial\u201d \n\u2022 Channel: Java Brains / Amigoscode \nRecommended Approach for LMS Project  [Type here] \n \nLayer Testing Tool Notes"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 401b6904-6b4a-4f44-ba9d-e9068e2ecb18
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Layer Testing Tool Notes \nController / API MockMvc Fast, mock dependencies \nService JUnit + Mockito Test business logic without HTTP \nRepository @DataJpaTest Test DB queries with H2 \nFull App Flow @SpringBootTest End-to-end integration \n \nUnit Test Cases \n \n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557 \n\u2551                    CONTROLLER TESTING QUICK REFERENCE                        \u2551 \n\u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 589f95c6-72d7-42a9-b807-f15dc38a168b
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 1. TEST CLASS SETUP                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n@ExtendWith(MockitoExtension.class)  \u2190 Add this to every test class \nclass YourControllerTest { \n     \n    @Mock                                \u2190 Fake version of dependency \n    private YourService service;"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: d060596a-39c5-48bb-913e-97515184fe0e
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "private YourService service; \n     \n    @InjectMocks                         \u2190 Real controller with fake dependencies \n    private YourController controller; \n     \n    @Test                                \u2190 This marks a test method \n    void testSomething() { } \n} \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 2. THE AAA PATTERN (Use in Every Test)                                      \u2502  [Type here]"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 482f02b2-46b9-4140-bcb8-0a38bdf29b24
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n@Test \nvoid testMethod_Success() { \n     \n    // ===== ARRANGE ===== (Set up) \n    when(service.getData()).thenReturn(data); \n     \n    // ===== ACT ===== (Execute) \n    ResponseEntity<?> response = controller.method(); \n     \n    // ===== ASSERT ===== (Check) \n    assertEquals(HttpStatus.OK, response.getStatusCode()); \n     \n    // ===== VERIFY ===== (Confirm method calls)"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 9c1efce7-35d1-40bd-bf7f-758bf8374ca8
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// ===== VERIFY ===== (Confirm method calls) \n    verify(service, times(1)).getData(); \n} \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 3. MOCKITO PATTERNS                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0f9cc890-56a0-47af-bc72-03e2046b0cc6
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 Pattern                     \u2502 When to Use                                  \u2502 \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524 \n\u2502 when().thenReturn()         \u2502 Method returns a value                       \u2502 \n\u2502 when().thenThrow()          \u2502 Method throws exception                      \u2502 \n\u2502 doNothing().when()          \u2502 Method returns void                          \u2502 \n\u2502 any()                       \u2502 Any argument of any type                     \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: d4b4d022-835c-4807-b518-3ae629d3648d
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 anyLong()                   \u2502 Any Long argument                            \u2502 \n\u2502 anyString()                 \u2502 Any String argument                          \u2502  [Type here] \n \n\u2502 eq(value)                   \u2502 Specific value (with any())                  \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nExamples: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ad514437-c949-483f-a5df-c3717ff07629
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 when(service.findById(1L)).thenReturn(user);                                 \u2502 \n\u2502 when(service.findById(any())).thenReturn(user);                              \u2502 \n\u2502 when(service.save(any())).thenThrow(new RuntimeException());                 \u2502 \n\u2502 doNothing().when(service).delete(1L);                                        \u2502 \n\u2502 when(service.update(eq(1L), any())).thenReturn(updated);                     \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 73ba9bed-063f-44e7-a837-ba857463fac9
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 4. COMMON ASSERTIONS                                                         \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 Assertion                           \u2502 What it Checks                         \u2502 \n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 2a460863-d376-4556-b355-9ac7e517b29c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 assertEquals(expected, actual)      \u2502 Two values are equal                   \u2502 \n\u2502 assertNotNull(object)               \u2502 Object is not null                     \u2502 \n\u2502 assertTrue(condition)               \u2502 Condition is true                      \u2502 \n\u2502 assertFalse(condition)              \u2502 Condition is false                     \u2502 \n\u2502 assertThrows(Exception.class, ...)  \u2502 Code throws exception                  \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0237d248-f7c1-4e6e-806f-d0e8b57daeb2
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Examples: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 assertEquals(HttpStatus.OK, response.getStatusCode());                       \u2502 \n\u2502 assertNotNull(response.getBody());                                           \u2502 \n\u2502 assertEquals(\"John\", user.getName());                                        \u2502  [Type here] \n \n\u2502 assertTrue(list.isEmpty());                                                  \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 67b847a9-c40d-48eb-a45f-2d49e5b02b17
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 5. VERIFY METHOD CALLS                                                       \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 verify(service, times(1)).method();     \u2190 Called exactly once                \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: abd6b64c-2f09-4add-80e9-f4c8225b17ef
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 verify(service, times(2)).method();     \u2190 Called exactly twice               \u2502 \n\u2502 verify(service, never()).method();      \u2190 Never called                       \u2502 \n\u2502 verify(service, atLeast(1)).method();   \u2190 Called at least once               \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 6. TEST SCENARIOS (Write These for Every Method)                            \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ad789c56-97aa-4376-81ec-6f5213455673
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nFor a GET method: \n\u251c\u2500\u2500    testGetMethod_Success          (Returns 200 OK with data) \n\u251c\u2500\u2500    testGetMethod_NotFound         (Returns 404 when not found) \n\u251c\u2500\u2500    testGetMethod_Error            (Returns 500 on exception) \n\u2514\u2500\u2500    testGetMethod_EmptyData        (Returns 200 with empty list) \n \nFor a POST method: \n\u251c\u2500\u2500    testPostMethod_Success         (Returns 201 CREATED)"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 0fc46093-540b-4a6d-8a51-5cf4cc8e8237
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u251c\u2500\u2500    testPostMethod_BadRequest      (Returns 400 for invalid data) \n\u251c\u2500\u2500    testPostMethod_Error           (Returns 500 on exception) \n\u2514\u2500\u2500    testPostMethod_Duplicate       (Returns 409 if already exists) \n \nFor a DELETE method:  [Type here] \n \n\u251c\u2500\u2500    testDeleteMethod_Success       (Returns 200 OK) \n\u251c\u2500\u2500    testDeleteMethod_NotFound      (Returns 404) \n\u2514\u2500\u2500    testDeleteMethod_Error         (Returns 500 on exception)"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 639de422-c746-43a9-bfff-dd92eac04167
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 7. RUNNING TESTS                                                             \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nCommand Line: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 mvn test                              \u2190 Run all tests                        \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 580c5a61-12be-49d7-b0ea-1c580f5e86e0
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 mvn test -Dtest=YourControllerTest    \u2190 Run specific test class             \u2502 \n\u2502 mvn test -Dtest=YourControllerTest#testMethod  \u2190 Run specific test method   \u2502 \n\u2502 mvn clean test jacoco:report          \u2190 Run with coverage report            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nIDE: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 Right-click test file \u2192 Run 'YourControllerTest'                            \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 3c4a7ea8-81b6-458a-80a3-ab82e391fecd
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502 Right-click test method \u2192 Run 'testMethod'                                  \u2502 \n\u2502 Click green play button next to test                                        \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 8. TEST NAMING CONVENTION                                                    \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 5e5f20a5-2d5d-4293-a86f-7a2c501fbbfa
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Format: test[MethodName]_[Scenario] \n \nExamples: \n\u251c\u2500\u2500 testGetUser_Success  [Type here] \n \n\u251c\u2500\u2500 testGetUser_NotFound \n\u251c\u2500\u2500 testGetUser_Error \n\u251c\u2500\u2500 testCreateUser_Success \n\u251c\u2500\u2500 testCreateUser_ValidationError \n\u251c\u2500\u2500 testDeleteUser_Success \n\u2514\u2500\u2500 testDeleteUser_NotFound \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 9. COMPLETE EXAMPLE                                                          \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 7087ad43-7111-40a9-bb72-1f71b9a0c2a8
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nController: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 @GetMapping(\"/user/{id}\")                                                    \u2502 \n\u2502 public ResponseEntity<User> getUser(@PathVariable Long id) {                \u2502 \n\u2502     User user = userService.findById(id);                                   \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 931b78fa-5d43-4473-88bc-1fd0a95538d9
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502     return ResponseEntity.ok(user);                                         \u2502 \n\u2502 }                                                                            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \nTest: \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 @ExtendWith(MockitoExtension.class)                                         \u2502 \n\u2502 class UserControllerTest {                                                  \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 605f7610-c3d9-42f4-aa3c-17abd1fb9f3c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502                                                                              \u2502 \n\u2502     @Mock                                                                    \u2502 \n\u2502     private UserService userService;                                        \u2502 \n\u2502                                                                              \u2502 \n\u2502     @InjectMocks                                                             \u2502 \n\u2502     private UserController userController;                                  \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ea96f5a1-444f-4f4e-a400-c95268d54458
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502                                                                              \u2502  [Type here] \n \n\u2502     @Test                                                                    \u2502 \n\u2502     void testGetUser_Success() {                                            \u2502 \n\u2502         // ARRANGE                                                           \u2502 \n\u2502         Long userId = 1L;                                                    \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: b59b4302-8e11-4f1d-9a33-452066f67f63
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502         User expectedUser = new User(1L, \"John\");                           \u2502 \n\u2502         when(userService.findById(userId)).thenReturn(expectedUser);        \u2502 \n\u2502                                                                              \u2502 \n\u2502         // ACT                                                               \u2502 \n\u2502         ResponseEntity<User> response = userController.getUser(userId);     \u2502 \n\u2502                                                                              \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: fa800c02-2756-4777-91a9-75bd59e7cb8c
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502         // ASSERT                                                            \u2502 \n\u2502         assertEquals(HttpStatus.OK, response.getStatusCode());              \u2502 \n\u2502         assertEquals(\"John\", response.getBody().getName());                 \u2502 \n\u2502                                                                              \u2502 \n\u2502         // VERIFY                                                            \u2502 \n\u2502         verify(userService, times(1)).findById(userId);                     \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 86d98c82-d4c3-40a4-bbfa-e92baf7cf2f0
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2502     }                                                                        \u2502 \n\u2502 }                                                                            \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 10. TROUBLESHOOTING                                                          \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: ba2f6c40-ca31-4e18-87bf-bf32652ca99f
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Problem: Mocks don't work \n\u2514\u2500\u2500 Solution: Add @ExtendWith(MockitoExtension.class) \n \nProblem: NullPointerException in test \n\u2514\u2500\u2500 Solution: Did you mock the return value? when(service.method()).thenReturn(...) \n \nProblem: Test fails with \"wanted but not invoked\"  [Type here] \n \n\u2514\u2500\u2500 Solution: Check if method name and parameters match exactly \n \nProblem: Wrong number of invocations \n\u2514\u2500\u2500 Solution: Check verify() count matches actual method calls \n \nProblem: Can't use eq() and any() together"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 4e6f6f58-cfee-4ad4-a155-10f3892b46af
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "Problem: Can't use eq() and any() together \n\u2514\u2500\u2500 Solution: If you use any() for one parameter, use eq() for specific values \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 11. CHECKLIST BEFORE SUBMITTING TESTS                                       \u2502 \n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n\u25a1 Test class has @ExtendWith(MockitoExtension.class) \n\u25a1 All dependencies are mocked with @Mock"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: a7c50387-d1f4-425a-bc02-6bf198a7220e
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u25a1 All dependencies are mocked with @Mock \n\u25a1 Controller has @InjectMocks \n\u25a1 Success test case written \n\u25a1 Error test case written \n\u25a1 Edge cases covered \n\u25a1 All tests use AAA pattern \n\u25a1 Tests have descriptive names \n\u25a1 verify() statements added where needed \n\u25a1 All tests pass: mvn test \n\u25a1 No System.out.println() in tests \n \n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \n\u2502 12. REMEMBER                                                                 \u2502"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: fcb51575-e17a-4f4c-804a-b7713eda01a6
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \n \n       One test = One scenario \n          AAA Pattern = Arrange, Act, Assert \n   Mock = Fake object  [Type here] \n \n   Verify = Check method was called \n    Test success AND failure scenarios \n        Start simple, add complexity gradually \n \nIntegration Test cases: \n \nFile Placement \n1. Test Class \nsrc/test/java/com/britanica/pbl/controller/ \n\u2514\u2500\u2500 DomainControllerIntegrationTest.java \n2. Test Configuration"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 5c930f14-106d-4bb7-b608-13507634976d
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "2. Test Configuration \nsrc/test/resources/ \n\u2514\u2500\u2500 application-test.properties \n \nStep 1: Add H2 Database Dependency \nAdd to your pom.xml: \n    <!-- H2 Database for Testing --> \n    <dependency> \n        <groupId>com.h2database</groupId> \n        <artifactId>h2</artifactId> \n        <scope>test</scope> \n    </dependency> \n \nRun All Integration Tests \nmvn test -Dtest=DomainControllerIntegrationTest \n \nSample Example: \n  [Type here] \n \n@SpringBootTest                 // \u2190 Loads full Spring context"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 5aac5ad0-bb30-46f8-ba7c-343d5073a117
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "@AutoConfigureMockMvc          // \u2190 Provides MockMvc for HTTP testing \n@Transactional                 // \u2190 Rollback after each test \nclass DomainControllerIntegrationTest { \n     \n    @Autowired \n    private MockMvc mockMvc;            // \u2190 Simulates HTTP requests \n     \n    @Autowired \n    private DomainRepository repository; // \u2190 Real repository \n     \n    @Test \n    @WithMockUser(authorities = \"Admin\") // \u2190 Mock security \n    void testListDomains_Success() throws Exception {"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 10ab4232-b7cf-4159-93f3-98ce652ab629
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// Insert REAL data into database \n        Domain domain = new Domain(); \n        domain.setDomainName(\"Test\"); \n        repository.save(domain);  // \u2190 Actually saves to H2 database \n         \n        // Make REAL HTTP request \n        mockMvc.perform(get(\"/domain/list\")) \n            .andExpect(status().isOk()) \n            .andExpect(jsonPath(\"$.domain\", hasSize(1))); \n    } \n} \n \nMockMvc Request Patterns \nGET Request  [Type here] \n \njava \nmockMvc.perform(get(\"/domain/list\")"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 504ed260-3aed-4889-8300-ed3ea2b8fe83
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "java \nmockMvc.perform(get(\"/domain/list\") \n        .param(\"page\", \"0\") \n        .param(\"size\", \"10\") \n        .param(\"search\", \"test\") \n        .contentType(MediaType.APPLICATION_JSON)) \n    .andExpect(status().isOk()) \n    .andExpect(jsonPath(\"$.domain\").isArray()); \nPOST Request \njava \nmockMvc.perform(post(\"/domain/create\") \n        .contentType(MediaType.APPLICATION_JSON) \n        .content(jsonString)) \n    .andExpect(status().isCreated())"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: d5aacef7-c643-4025-b913-770195d30802
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": ".andExpect(status().isCreated()) \n    .andExpect(jsonPath(\"$.error\").value(\"false\")); \nPUT Request \njava \nmockMvc.perform(put(\"/domain/update\") \n        .contentType(MediaType.APPLICATION_JSON) \n        .content(jsonString)) \n    .andExpect(status().isOk()); \nDELETE Request \njava \nmockMvc.perform(delete(\"/domain/delete/{id}\", domainId) \n        .contentType(MediaType.APPLICATION_JSON)) \n    .andExpect(status().isOk()); \n \n    Common JSON Path Expressions \njava \n// Check string value"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: c8f6cdf8-740c-456b-8c7f-ee7a8004e8b8
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "java \n// Check string value \n.andExpect(jsonPath(\"$.error\").value(\"false\"))  [Type here] \n \n \n// Check boolean \n.andExpect(jsonPath(\"$.error\").value(false)) \n \n// Check number \n.andExpect(jsonPath(\"$.totalElements\").value(10)) \n \n// Check array size \n.andExpect(jsonPath(\"$.domain\", hasSize(5))) \n \n// Check array exists \n.andExpect(jsonPath(\"$.domain\").isArray()) \n \n// Check nested value \n.andExpect(jsonPath(\"$.domain[0].domainName\").value(\"Test\")) \n \n// Check exists"}


created_at: 2026-04-13 09:42:05
topic: persistent://default/default/f8719c22-d97d-4efc-a869-0b6bbc6f333f
id: 440bec89-5867-4df9-9d50-42473de3483d
encoding: FLOAT32
metadata:
{"company_id": "52", "course_id": "952", "lesson_id": "1232", "content_id": "1792", "file_name": "Types of Test Cases_v1.pdf", "chroma:document": "// Check exists \n.andExpect(jsonPath(\"$.message\").exists()) \n \n// Check doesn't exist \n.andExpect(jsonPath(\"$.error\").doesNotExist()) \n \n// Check not null \n.andExpect(jsonPath(\"$.domain\").isNotEmpty())"}


# embedding_metadata

key: chroma:document
string_value:
National Health Profile 2009 v
India: Country Overview
India comprising 28 states (Provinces) and 07 union 
territories, is one of the oldest civilizations in the 
world with a kaleidoscopic variety and rich cultural 
heritage.
Area – it covers an area of 32,87,2631 sq km, 
extending from the snow-covered Himalayan 
heights to the tropical rain forests of the south. 
Bounded by the great Himalayas in the north, it 
stretches southwards and at the tropic of cancer,


key: chroma:document
string_value:
tapers off into the Indian Ocean between the Bay 
of Bengal on the east and the Arabian Sea on the 
west.
Location – lying entirely in the northern 
hemisphere, the mainland extends between 
latitudes 8°4’ and 37°6’ north, longitudes 68°7’ and 
97°25’ east, and measures about 3,214 km from 
north to south between the extreme latitudes and 
about 2,933 km from east to west between the 
extreme longitudes. It has a land frontier of about 
15,200 km. The total length of the coastline of the


key: chroma:document
string_value:
mainland, Lakshadweep Islands, and the Andaman 
and Nicobar Islands is 7,516.6 km.
Boundaries – countries having a common border 
with India are Afghanistan and Pakistan to the 
north-west, china, Bhutan and Nepal to the north, 
Myanmar to the east and Bangladesh to the east India: Country Overview of west Bengal. Sri Lanka is separated 
from India by a narrow channel of sea formed by the Palk Strait and the Gulf of Mannar.


key: chroma:document
string_value:
Physical diversity – the main land comprises of four regions, namely, the great mountain zone, plains of the 
Ganga and the Indus, the desert region and the southern peninsula.
The Himalayas comprise three almost parallel ranges interspersed with large plateaus and valleys, which extends 
over a distance of about 2,400 km with a varying depth of 240 to 320 km in the northernmost part of the 
country.


key: chroma:document
string_value:
country.
The plains of the Ganga and the Indus, about 2,400 km long and 240 to 320 km broad, are formed by basins of 
three distinct river systems – the Indus, the Ganga and the Brahmaputra. They are one of the world’s greatest 
stretches of flat alluvium and also one of the most densely populated areas on the earth.
The desert region in the western part comprise of the great desert extending from the edge of the Rann of


key: chroma:document
string_value:
kuchh beyond the Luni River northward including the whole of the Rajasthan-Sind frontier. While the little desert 
extends from the luni between Jaisalmer and Jodhpur up to the northern wastes. Between the great and the little 
deserts lies a zone of absolutely sterile country, consisting of rocky land cut up by limestone ridges.
The peninsular plateau is marked by a mass of mountain and hill ranges varying from 460 to 1,220 meters in


key: chroma:document
string_value:
height. Prominent among these are the Aravalli, Vindhya, Satpura, Maikala and Ajanta, flanked by the Eastern 
Ghats with average elevation is about 610 meters, and the Western Ghats where it is generally from 915 to 1,220 
meters, rising in places to over 2,440 meters.


key: chroma:document
string_value:
[Type here] 
 
Types of Test Cases: 
 
Unit Testing 
Unit testing verifies a single function or method in isolation to ensure it works correctly. 
  Example: Testing one function’s logic without database, API, or UI. 
 
Integration Testing 
Integration testing verifies multiple functions or modules working together, where one function may call another 
function or interact with external components like a database.


key: chroma:document
string_value:
Example: Testing a function that internally calls another function and processes combined results. 
 
Functional Testing 
Functional testing verifies the complete feature or page behavior, ensuring the system performs as expected from 
the user’s perspective. 
  Example: Testing a full page or API endpoint that processes user input and returns output. 
 
 
SpringBoot Test Cases: 
 
References (BEST LEARNING LINKS) 
     Official Docs 
   Spring Boot Testing


key: chroma:document
string_value:
Official Docs 
   Spring Boot Testing 
https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.testing 
     Baeldung (Highly Recommended) 
   Controller Testing 
https://www.baeldung.com/spring-boot-testing 
   MockMvc 
https://www.baeldung.com/spring-mvc-test-examples 
          YouTube (Easy) 
• Search: “Spring Boot MockMvc tutorial” 
• Channel: Java Brains / Amigoscode 
Recommended Approach for LMS Project  [Type here] 
 
Layer Testing Tool Notes


key: chroma:document
string_value:
Layer Testing Tool Notes 
Controller / API MockMvc Fast, mock dependencies 
Service JUnit + Mockito Test business logic without HTTP 
Repository @DataJpaTest Test DB queries with H2 
Full App Flow @SpringBootTest End-to-end integration 
 
Unit Test Cases 
 
╔════════════════════════════════════════════════════════════
══════════════════╗ 
║                    CONTROLLER TESTING QUICK REFERENCE                        ║ 
╚════════════════════════════════════════════════════════════


key: chroma:document
string_value:
══════════════════╝ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 1. TEST CLASS SETUP                                                          │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
@ExtendWith(MockitoExtension.class)  ← Add this to every test class 
class YourControllerTest { 
     
    @Mock                                ← Fake version of dependency 
    private YourService service;


key: chroma:document
string_value:
private YourService service; 
     
    @InjectMocks                         ← Real controller with fake dependencies 
    private YourController controller; 
     
    @Test                                ← This marks a test method 
    void testSomething() { } 
} 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 2. THE AAA PATTERN (Use in Every Test)                                      │  [Type here]


key: chroma:document
string_value:
└──────────────────────────────────────────────────────────────────────────────┘ 
 
@Test 
void testMethod_Success() { 
     
    // ===== ARRANGE ===== (Set up) 
    when(service.getData()).thenReturn(data); 
     
    // ===== ACT ===== (Execute) 
    ResponseEntity<?> response = controller.method(); 
     
    // ===== ASSERT ===== (Check) 
    assertEquals(HttpStatus.OK, response.getStatusCode()); 
     
    // ===== VERIFY ===== (Confirm method calls)


key: chroma:document
string_value:
// ===== VERIFY ===== (Confirm method calls) 
    verify(service, times(1)).getData(); 
} 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 3. MOCKITO PATTERNS                                                          │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌─────────────────────────────┬──────────────────────────────────────────────┐


key: chroma:document
string_value:
│ Pattern                     │ When to Use                                  │ 
├─────────────────────────────┼──────────────────────────────────────────────┤ 
│ when().thenReturn()         │ Method returns a value                       │ 
│ when().thenThrow()          │ Method throws exception                      │ 
│ doNothing().when()          │ Method returns void                          │ 
│ any()                       │ Any argument of any type                     │


key: chroma:document
string_value:
│ anyLong()                   │ Any Long argument                            │ 
│ anyString()                 │ Any String argument                          │  [Type here] 
 
│ eq(value)                   │ Specific value (with any())                  │ 
└─────────────────────────────┴──────────────────────────────────────────────┘ 
 
Examples: 
┌──────────────────────────────────────────────────────────────────────────────┐


key: chroma:document
string_value:
│ when(service.findById(1L)).thenReturn(user);                                 │ 
│ when(service.findById(any())).thenReturn(user);                              │ 
│ when(service.save(any())).thenThrow(new RuntimeException());                 │ 
│ doNothing().when(service).delete(1L);                                        │ 
│ when(service.update(eq(1L), any())).thenReturn(updated);                     │ 
└──────────────────────────────────────────────────────────────────────────────┘


key: chroma:document
string_value:
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 4. COMMON ASSERTIONS                                                         │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌─────────────────────────────────────┬────────────────────────────────────────┐ 
│ Assertion                           │ What it Checks                         │ 
├─────────────────────────────────────┼────────────────────────────────────────┤


key: chroma:document
string_value:
│ assertEquals(expected, actual)      │ Two values are equal                   │ 
│ assertNotNull(object)               │ Object is not null                     │ 
│ assertTrue(condition)               │ Condition is true                      │ 
│ assertFalse(condition)              │ Condition is false                     │ 
│ assertThrows(Exception.class, ...)  │ Code throws exception                  │ 
└─────────────────────────────────────┴────────────────────────────────────────┘


key: chroma:document
string_value:
Examples: 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ assertEquals(HttpStatus.OK, response.getStatusCode());                       │ 
│ assertNotNull(response.getBody());                                           │ 
│ assertEquals("John", user.getName());                                        │  [Type here] 
 
│ assertTrue(list.isEmpty());                                                  │


key: chroma:document
string_value:
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 5. VERIFY METHOD CALLS                                                       │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ verify(service, times(1)).method();     ← Called exactly once                │


key: chroma:document
string_value:
│ verify(service, times(2)).method();     ← Called exactly twice               │ 
│ verify(service, never()).method();      ← Never called                       │ 
│ verify(service, atLeast(1)).method();   ← Called at least once               │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 6. TEST SCENARIOS (Write These for Every Method)                            │


key: chroma:document
string_value:
└──────────────────────────────────────────────────────────────────────────────┘ 
 
For a GET method: 
├──    testGetMethod_Success          (Returns 200 OK with data) 
├──    testGetMethod_NotFound         (Returns 404 when not found) 
├──    testGetMethod_Error            (Returns 500 on exception) 
└──    testGetMethod_EmptyData        (Returns 200 with empty list) 
 
For a POST method: 
├──    testPostMethod_Success         (Returns 201 CREATED)


key: chroma:document
string_value:
├──    testPostMethod_BadRequest      (Returns 400 for invalid data) 
├──    testPostMethod_Error           (Returns 500 on exception) 
└──    testPostMethod_Duplicate       (Returns 409 if already exists) 
 
For a DELETE method:  [Type here] 
 
├──    testDeleteMethod_Success       (Returns 200 OK) 
├──    testDeleteMethod_NotFound      (Returns 404) 
└──    testDeleteMethod_Error         (Returns 500 on exception)


key: chroma:document
string_value:
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 7. RUNNING TESTS                                                             │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
Command Line: 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ mvn test                              ← Run all tests                        │


key: chroma:document
string_value:
│ mvn test -Dtest=YourControllerTest    ← Run specific test class             │ 
│ mvn test -Dtest=YourControllerTest#testMethod  ← Run specific test method   │ 
│ mvn clean test jacoco:report          ← Run with coverage report            │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
IDE: 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ Right-click test file → Run 'YourControllerTest'                            │


key: chroma:document
string_value:
│ Right-click test method → Run 'testMethod'                                  │ 
│ Click green play button next to test                                        │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 8. TEST NAMING CONVENTION                                                    │ 
└──────────────────────────────────────────────────────────────────────────────┘


key: chroma:document
string_value:
Format: test[MethodName]_[Scenario] 
 
Examples: 
├── testGetUser_Success  [Type here] 
 
├── testGetUser_NotFound 
├── testGetUser_Error 
├── testCreateUser_Success 
├── testCreateUser_ValidationError 
├── testDeleteUser_Success 
└── testDeleteUser_NotFound 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 9. COMPLETE EXAMPLE                                                          │


key: chroma:document
string_value:
└──────────────────────────────────────────────────────────────────────────────┘ 
 
Controller: 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ @GetMapping("/user/{id}")                                                    │ 
│ public ResponseEntity<User> getUser(@PathVariable Long id) {                │ 
│     User user = userService.findById(id);                                   │


key: chroma:document
string_value:
│     return ResponseEntity.ok(user);                                         │ 
│ }                                                                            │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
Test: 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ @ExtendWith(MockitoExtension.class)                                         │ 
│ class UserControllerTest {                                                  │


key: chroma:document
string_value:
│                                                                              │ 
│     @Mock                                                                    │ 
│     private UserService userService;                                        │ 
│                                                                              │ 
│     @InjectMocks                                                             │ 
│     private UserController userController;                                  │


key: chroma:document
string_value:
│                                                                              │  [Type here] 
 
│     @Test                                                                    │ 
│     void testGetUser_Success() {                                            │ 
│         // ARRANGE                                                           │ 
│         Long userId = 1L;                                                    │


key: chroma:document
string_value:
│         User expectedUser = new User(1L, "John");                           │ 
│         when(userService.findById(userId)).thenReturn(expectedUser);        │ 
│                                                                              │ 
│         // ACT                                                               │ 
│         ResponseEntity<User> response = userController.getUser(userId);     │ 
│                                                                              │


key: chroma:document
string_value:
│         // ASSERT                                                            │ 
│         assertEquals(HttpStatus.OK, response.getStatusCode());              │ 
│         assertEquals("John", response.getBody().getName());                 │ 
│                                                                              │ 
│         // VERIFY                                                            │ 
│         verify(userService, times(1)).findById(userId);                     │


key: chroma:document
string_value:
│     }                                                                        │ 
│ }                                                                            │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 10. TROUBLESHOOTING                                                          │ 
└──────────────────────────────────────────────────────────────────────────────┘


key: chroma:document
string_value:
Problem: Mocks don't work 
└── Solution: Add @ExtendWith(MockitoExtension.class) 
 
Problem: NullPointerException in test 
└── Solution: Did you mock the return value? when(service.method()).thenReturn(...) 
 
Problem: Test fails with "wanted but not invoked"  [Type here] 
 
└── Solution: Check if method name and parameters match exactly 
 
Problem: Wrong number of invocations 
└── Solution: Check verify() count matches actual method calls 
 
Problem: Can't use eq() and any() together


key: chroma:document
string_value:
Problem: Can't use eq() and any() together 
└── Solution: If you use any() for one parameter, use eq() for specific values 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 11. CHECKLIST BEFORE SUBMITTING TESTS                                       │ 
└──────────────────────────────────────────────────────────────────────────────┘ 
 
□ Test class has @ExtendWith(MockitoExtension.class) 
□ All dependencies are mocked with @Mock


key: chroma:document
string_value:
□ All dependencies are mocked with @Mock 
□ Controller has @InjectMocks 
□ Success test case written 
□ Error test case written 
□ Edge cases covered 
□ All tests use AAA pattern 
□ Tests have descriptive names 
□ verify() statements added where needed 
□ All tests pass: mvn test 
□ No System.out.println() in tests 
 
┌──────────────────────────────────────────────────────────────────────────────┐ 
│ 12. REMEMBER                                                                 │


key: chroma:document
string_value:
└──────────────────────────────────────────────────────────────────────────────┘ 
 
       One test = One scenario 
          AAA Pattern = Arrange, Act, Assert 
   Mock = Fake object  [Type here] 
 
   Verify = Check method was called 
    Test success AND failure scenarios 
        Start simple, add complexity gradually 
 
Integration Test cases: 
 
File Placement 
1. Test Class 
src/test/java/com/britanica/pbl/controller/ 
└── DomainControllerIntegrationTest.java 
2. Test Configuration


key: chroma:document
string_value:
2. Test Configuration 
src/test/resources/ 
└── application-test.properties 
 
Step 1: Add H2 Database Dependency 
Add to your pom.xml: 
    <!-- H2 Database for Testing --> 
    <dependency> 
        <groupId>com.h2database</groupId> 
        <artifactId>h2</artifactId> 
        <scope>test</scope> 
    </dependency> 
 
Run All Integration Tests 
mvn test -Dtest=DomainControllerIntegrationTest 
 
Sample Example: 
  [Type here] 
 
@SpringBootTest                 // ← Loads full Spring context


key: chroma:document
string_value:
@AutoConfigureMockMvc          // ← Provides MockMvc for HTTP testing 
@Transactional                 // ← Rollback after each test 
class DomainControllerIntegrationTest { 
     
    @Autowired 
    private MockMvc mockMvc;            // ← Simulates HTTP requests 
     
    @Autowired 
    private DomainRepository repository; // ← Real repository 
     
    @Test 
    @WithMockUser(authorities = "Admin") // ← Mock security 
    void testListDomains_Success() throws Exception {


key: chroma:document
string_value:
// Insert REAL data into database 
        Domain domain = new Domain(); 
        domain.setDomainName("Test"); 
        repository.save(domain);  // ← Actually saves to H2 database 
         
        // Make REAL HTTP request 
        mockMvc.perform(get("/domain/list")) 
            .andExpect(status().isOk()) 
            .andExpect(jsonPath("$.domain", hasSize(1))); 
    } 
} 
 
MockMvc Request Patterns 
GET Request  [Type here] 
 
java 
mockMvc.perform(get("/domain/list")


key: chroma:document
string_value:
java 
mockMvc.perform(get("/domain/list") 
        .param("page", "0") 
        .param("size", "10") 
        .param("search", "test") 
        .contentType(MediaType.APPLICATION_JSON)) 
    .andExpect(status().isOk()) 
    .andExpect(jsonPath("$.domain").isArray()); 
POST Request 
java 
mockMvc.perform(post("/domain/create") 
        .contentType(MediaType.APPLICATION_JSON) 
        .content(jsonString)) 
    .andExpect(status().isCreated())


key: chroma:document
string_value:
.andExpect(status().isCreated()) 
    .andExpect(jsonPath("$.error").value("false")); 
PUT Request 
java 
mockMvc.perform(put("/domain/update") 
        .contentType(MediaType.APPLICATION_JSON) 
        .content(jsonString)) 
    .andExpect(status().isOk()); 
DELETE Request 
java 
mockMvc.perform(delete("/domain/delete/{id}", domainId) 
        .contentType(MediaType.APPLICATION_JSON)) 
    .andExpect(status().isOk()); 
 
    Common JSON Path Expressions 
java 
// Check string value


key: chroma:document
string_value:
java 
// Check string value 
.andExpect(jsonPath("$.error").value("false"))  [Type here] 
 
 
// Check boolean 
.andExpect(jsonPath("$.error").value(false)) 
 
// Check number 
.andExpect(jsonPath("$.totalElements").value(10)) 
 
// Check array size 
.andExpect(jsonPath("$.domain", hasSize(5))) 
 
// Check array exists 
.andExpect(jsonPath("$.domain").isArray()) 
 
// Check nested value 
.andExpect(jsonPath("$.domain[0].domainName").value("Test")) 
 
// Check exists


key: chroma:document
string_value:
// Check exists 
.andExpect(jsonPath("$.message").exists()) 
 
// Check doesn't exist 
.andExpect(jsonPath("$.error").doesNotExist()) 
 
// Check not null 
.andExpect(jsonPath("$.domain").isNotEmpty())


key: chroma:document
string_value:
After knowing about noun, it is important for us to know what is a pronoun. What is a pronoun? Why is it used? The pronoun is a word used in a place of one or more nouns. It may stand for a person, place, thing or idea. It refers to a person or thing without giving the name. The various kinds of pronouns are personal pronouns, indifinate pronouns, demonstrative pronouns and introgative pronouns. Now let us understand the usage of pronouns with examples. The word Rocky has a bicycle. He writes


key: chroma:document
string_value:
examples. The word Rocky has a bicycle. He writes it every day. The words he and it refer to in the second sentence are used for Rocky and bicycle. The words he used for Rocky and it used for bicycle are called pronouns. We use pronouns to avoid repetition of the same words, which in this case are Rocky and bicycle. Most of the pronouns must be used independently, that is, without a noun following them. Example, this is a big palace. This is a pronoun as it occurs independently. But when a noun


key: chroma:document
string_value:
as it occurs independently. But when a noun follows them, they are no longer pronouns. Example, this palace is big. This is followed by the noun Palace. Here this as a determiner describes the noun and so it is not a pronoun. We have understood what are nouns and pronouns. Now let us see what are adjectives. Adjectives add to the meaning of the nouns they are associated with. They tell us about the quantity, quality, size, color, number of the noun they go with. Adjectives usually answer one of


key: chroma:document
string_value:
they go with. Adjectives usually answer one of the three questions about the noun they describe. What kind of? I found a red rose in the garden. What kind of rose? Red. How many? These soaps please. How many soaps? Three. Which one? I would eat these cakes. Which cakes? These. There are three types of adjectives. They are demonstrative, common and proper. Click on the buttons to know more. As we have reached an end of this unit, let us have a quick recap. In this unit we have learnt about


key: chroma:document
string_value:
a quick recap. In this unit we have learnt about nouns, pronouns and adjectives. Click on each of these for a quick recap. This unit has enabled you to identify, a noun in the sentence, point out a pronoun and outline an adjective. Thank you for going through this unit. Hope the information presented was useful and will help you in your day-to-day work.


