[{"data":1,"prerenderedAt":1257},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fno-db-unit-tests":170,"\u002Fguides\u002Fno-db-unit-tests-surround":1252},[4,25,104,150,160],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15,20],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-book-open",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-rocket",{"title":26,"icon":6,"path":27,"stem":28,"children":29,"page":6},"Guides","\u002Fguides","2.guides",[30,35,40,45,50,55,60,65,70,75,79,84,89,94,99],{"title":31,"path":32,"stem":33,"icon":34},"Seeds and TestBiome","\u002Fguides\u002Fseeds-and-testbiome","2.guides\u002F01.seeds-and-testbiome","i-lucide-sprout",{"title":36,"path":37,"stem":38,"icon":39},"Blueprints","\u002Fguides\u002Fblueprints","2.guides\u002F02.blueprints","i-lucide-drafting-compass",{"title":41,"path":42,"stem":43,"icon":44},"Customizing","\u002Fguides\u002Fcustomizing","2.guides\u002F03.customizing","i-lucide-sliders-horizontal",{"title":46,"path":47,"stem":48,"icon":49},"Parent\u002Fchild chains and .Under","\u002Fguides\u002Fparents-and-children","2.guides\u002F04.parents-and-children","i-lucide-git-fork",{"title":51,"path":52,"stem":53,"icon":54},"Fan-out","\u002Fguides\u002Ffan-out","2.guides\u002F05.fan-out","i-lucide-split",{"title":56,"path":57,"stem":58,"icon":59},"Sequences","\u002Fguides\u002Fsequences","2.guides\u002F06.sequences","i-lucide-list-ordered",{"title":61,"path":62,"stem":63,"icon":64},"Time and precision","\u002Fguides\u002Ftime-and-precision","2.guides\u002F07.time-and-precision","i-lucide-clock",{"title":66,"path":67,"stem":68,"icon":69},"Transients","\u002Fguides\u002Ftransients","2.guides\u002F08.transients","i-lucide-ghost",{"title":71,"path":72,"stem":73,"icon":74},"Aggregates","\u002Fguides\u002Faggregates","2.guides\u002F09.aggregates","i-lucide-boxes",{"title":76,"path":77,"stem":78,"icon":74},"Input blueprints","\u002Fguides\u002Finput-blueprints","2.guides\u002F09.input-blueprints",{"title":80,"path":81,"stem":82,"icon":83},"Save hooks and global defaults","\u002Fguides\u002Fsave-hooks-and-defaults","2.guides\u002F10.save-hooks-and-defaults","i-lucide-webhook",{"title":85,"path":86,"stem":87,"icon":88},"EF Core store","\u002Fguides\u002Fef-core-store","2.guides\u002F11.ef-core-store","i-lucide-database",{"title":90,"path":91,"stem":92,"icon":93},"No-DB unit tests","\u002Fguides\u002Fno-db-unit-tests","2.guides\u002F12.no-db-unit-tests","i-lucide-flask-conical",{"title":95,"path":96,"stem":97,"icon":98},"Generated grafts and scenario helpers","\u002Fguides\u002Fscenario-helpers-and-sugar","2.guides\u002F13.scenario-helpers-and-sugar","i-lucide-wand-sparkles",{"title":100,"path":101,"stem":102,"icon":103},"Constructor setup","\u002Fguides\u002Fconstructor-setup","2.guides\u002F14.constructor-setup","i-lucide-blocks",{"title":105,"path":106,"stem":107,"children":108,"icon":6},"Examples","\u002Fexamples","3.examples\u002F1.index",[109,111,116,121,126,130,135,140,145],{"title":105,"path":106,"stem":107,"icon":110},"i-lucide-library",{"title":112,"path":113,"stem":114,"icon":115},"Code reviews","\u002Fexamples\u002Fcode-reviews","3.examples\u002F2.code-reviews","i-lucide-git-pull-request",{"title":117,"path":118,"stem":119,"icon":120},"Membership","\u002Fexamples\u002Fmembership","3.examples\u002F3.membership","i-lucide-users",{"title":122,"path":123,"stem":124,"icon":125},"Board","\u002Fexamples\u002Fboard","3.examples\u002F4.board","i-lucide-kanban",{"title":127,"path":128,"stem":129,"icon":44},"Custom seed","\u002Fexamples\u002Fcustom-seed","3.examples\u002F5.custom-seed",{"title":131,"path":132,"stem":133,"icon":134},"Commerce","\u002Fexamples\u002Fcommerce","3.examples\u002F6.commerce","i-lucide-shopping-cart",{"title":136,"path":137,"stem":138,"icon":139},"Project management","\u002Fexamples\u002Fproject-management","3.examples\u002F7.project-management","i-lucide-folder-kanban",{"title":141,"path":142,"stem":143,"icon":144},"Learning","\u002Fexamples\u002Flearning","3.examples\u002F8.learning","i-lucide-graduation-cap",{"title":146,"path":147,"stem":148,"icon":149},"Docs ingest","\u002Fexamples\u002Fdocs-ingest","3.examples\u002F9.docs-ingest","i-lucide-file-search",{"title":151,"icon":6,"path":152,"stem":153,"children":154,"page":6},"Reference","\u002Freference","4.reference",[155],{"title":156,"path":157,"stem":158,"icon":159},"API cheat sheet","\u002Freference\u002Fapi-cheat-sheet","4.reference\u002F1.api-cheat-sheet","i-lucide-list-checks",{"title":161,"icon":6,"path":162,"stem":163,"children":164,"page":6},"Agent Skills","\u002Fagents","5.agents",[165],{"title":166,"path":167,"stem":168,"icon":169},"Agent skills","\u002Fagents\u002Fagent-skills","5.agents\u002F1.agent-skills","i-lucide-bot",{"id":171,"title":90,"body":172,"description":1245,"extension":1246,"links":1247,"meta":1248,"navigation":1249,"path":91,"seo":1250,"stem":92,"__hash__":1251},"docs\u002F2.guides\u002F12.no-db-unit-tests.md",{"type":173,"value":174,"toc":1240},"minimark",[175,180,193,790,808,812,819,981,1088,1092,1095,1210,1236],[176,177,179],"h2",{"id":178},"omit-the-store","Omit the store",[181,182,183,184,188,189,192],"p",{},"If the behavior is a pure function over entities, a database adds setup without helping the assertion. You can use the same blueprints without a store. Biome defaults to ",[185,186,187],"code",{},"NullStore",", and entities exist as soon as each Add returns, so there is no need to call ",[185,190,191],{},"BuildAsync"," unless you want save hooks to run.",[194,195,196,323],"code-group",{},[197,198,206],"pre",{"className":199,"code":200,"filename":201,"highlights":202,"language":204,"meta":205,"style":205},"language-csharp shiki shiki-themes material-theme-lighter github-light github-dark","TestBiome\n    .Start(out _) \u002F\u002F NullStore; no BuildAsync needed\n    .AddCodeRepository(out var repo)\n    .AddPullRequests(out var prs, PullRequests.Draft, PullRequests.Merged);\n\n\u002F\u002F act: var summary = PullRequestSummary.From(repo, prs);\n","With Biome",[203],4,"csharp","",[185,207,208,217,245,268,310,317],{"__ignoreMap":205},[209,210,213],"span",{"class":211,"line":212},"line",1,[209,214,216],{"class":215},"su5hD","TestBiome\n",[209,218,220,224,228,231,235,238,241],{"class":211,"line":219},2,[209,221,223],{"class":222},"sP7_E","    .",[209,225,227],{"class":226},"sGLFI","Start",[209,229,230],{"class":222},"(",[209,232,234],{"class":233},"sbsja","out",[209,236,237],{"class":215}," _",[209,239,240],{"class":222},")",[209,242,244],{"class":243},"sutJx"," \u002F\u002F NullStore; no BuildAsync needed\n",[209,246,248,250,253,255,257,261,265],{"class":211,"line":247},3,[209,249,223],{"class":222},[209,251,252],{"class":226},"AddCodeRepository",[209,254,230],{"class":222},[209,256,234],{"class":233},[209,258,260],{"class":259},"sG8yY"," var",[209,262,264],{"class":263},"sbgvK"," repo",[209,266,267],{"class":222},")\n",[209,269,272,274,277,279,281,283,286,289,292,295,298,300,302,304,307],{"class":270,"line":203},[211,271],"highlight",[209,273,223],{"class":222},[209,275,276],{"class":226},"AddPullRequests",[209,278,230],{"class":222},[209,280,234],{"class":233},[209,282,260],{"class":259},[209,284,285],{"class":263}," prs",[209,287,288],{"class":222},",",[209,290,291],{"class":215}," PullRequests",[209,293,294],{"class":222},".",[209,296,297],{"class":215},"Draft",[209,299,288],{"class":222},[209,301,291],{"class":215},[209,303,294],{"class":222},[209,305,306],{"class":215},"Merged",[209,308,309],{"class":222},");\n",[209,311,313],{"class":211,"line":312},5,[209,314,316],{"emptyLinePlaceholder":315},true,"\n",[209,318,320],{"class":211,"line":319},6,[209,321,322],{"class":243},"\u002F\u002F act: var summary = PullRequestSummary.From(repo, prs);\n",[324,325,328],"code-collapse",{"label":326,"name":327},"Without Biome","setup",[197,329,331],{"className":199,"code":330,"language":204,"meta":205,"style":205},"var now = DateTimeOffset.UtcNow;\nvar repo = new CodeRepository\n{\n    Id = $\"repo_{Guid.CreateVersion7():N}\",\n    OrganizationId = \"org_test\",\n    OwnerQualifiedName = \"zeeq-ai\u002Fexample\",\n    Enabled = true,\n    CreatedAtUtc = now,\n};\nvar prs = new[]\n{\n    new PullRequestRecord\n    {\n        Id = $\"pr_{Guid.CreateVersion7():N}\",\n        RepositoryId = repo.Id,\n        PullRequestNumber = 1,\n        Title = \"Pull request 1\",\n        Branch = \"feature\u002F1\",\n        IsDraft = true,\n        State = PullRequestState.Open,\n    },\n    new PullRequestRecord\n    {\n        Id = $\"pr_{Guid.CreateVersion7():N}\",\n        RepositoryId = repo.Id,\n        PullRequestNumber = 2,\n        Title = \"Pull request 2\",\n        Branch = \"feature\u002F2\",\n        State = PullRequestState.Merged,\n    },\n};\n\n\u002F\u002F act: var summary = PullRequestSummary.From(repo, prs);\n",[185,332,333,356,370,375,420,437,453,467,479,485,499,504,513,519,552,569,583,600,617,629,647,653,660,665,696,711,723,739,755,770,775,780,785],{"__ignoreMap":205},[209,334,335,338,341,345,348,350,353],{"class":211,"line":212},[209,336,337],{"class":259},"var",[209,339,340],{"class":263}," now",[209,342,344],{"class":343},"smGrS"," =",[209,346,347],{"class":215}," DateTimeOffset",[209,349,294],{"class":222},[209,351,352],{"class":215},"UtcNow",[209,354,355],{"class":222},";\n",[209,357,358,360,362,364,367],{"class":211,"line":219},[209,359,337],{"class":259},[209,361,264],{"class":263},[209,363,344],{"class":343},[209,365,366],{"class":343}," new",[209,368,369],{"class":263}," CodeRepository\n",[209,371,372],{"class":211,"line":247},[209,373,374],{"class":222},"{\n",[209,376,377,380,383,387,391,394,397,399,402,405,408,411,414,417],{"class":211,"line":203},[209,378,379],{"class":215},"    Id ",[209,381,382],{"class":343},"=",[209,384,386],{"class":385},"sjJ54"," $\"",[209,388,390],{"class":389},"s_sjI","repo_",[209,392,393],{"class":385},"{",[209,395,396],{"class":215},"Guid",[209,398,294],{"class":385},[209,400,401],{"class":226},"CreateVersion7",[209,403,404],{"class":385},"()",[209,406,407],{"class":343},":",[209,409,410],{"class":215},"N",[209,412,413],{"class":385},"}",[209,415,416],{"class":385},"\"",[209,418,419],{"class":222},",\n",[209,421,422,425,427,430,433,435],{"class":211,"line":312},[209,423,424],{"class":215},"    OrganizationId ",[209,426,382],{"class":343},[209,428,429],{"class":385}," \"",[209,431,432],{"class":389},"org_test",[209,434,416],{"class":385},[209,436,419],{"class":222},[209,438,439,442,444,446,449,451],{"class":211,"line":319},[209,440,441],{"class":215},"    OwnerQualifiedName ",[209,443,382],{"class":343},[209,445,429],{"class":385},[209,447,448],{"class":389},"zeeq-ai\u002Fexample",[209,450,416],{"class":385},[209,452,419],{"class":222},[209,454,456,459,461,465],{"class":211,"line":455},7,[209,457,458],{"class":215},"    Enabled ",[209,460,382],{"class":343},[209,462,464],{"class":463},"syTEX"," true",[209,466,419],{"class":222},[209,468,470,473,475,477],{"class":211,"line":469},8,[209,471,472],{"class":215},"    CreatedAtUtc ",[209,474,382],{"class":343},[209,476,340],{"class":215},[209,478,419],{"class":222},[209,480,482],{"class":211,"line":481},9,[209,483,484],{"class":222},"};\n",[209,486,488,490,492,494,496],{"class":211,"line":487},10,[209,489,337],{"class":259},[209,491,285],{"class":263},[209,493,344],{"class":343},[209,495,366],{"class":343},[209,497,498],{"class":222},"[]\n",[209,500,502],{"class":211,"line":501},11,[209,503,374],{"class":222},[209,505,507,510],{"class":211,"line":506},12,[209,508,509],{"class":343},"    new",[209,511,512],{"class":263}," PullRequestRecord\n",[209,514,516],{"class":211,"line":515},13,[209,517,518],{"class":222},"    {\n",[209,520,522,525,527,529,532,534,536,538,540,542,544,546,548,550],{"class":211,"line":521},14,[209,523,524],{"class":215},"        Id ",[209,526,382],{"class":343},[209,528,386],{"class":385},[209,530,531],{"class":389},"pr_",[209,533,393],{"class":385},[209,535,396],{"class":215},[209,537,294],{"class":385},[209,539,401],{"class":226},[209,541,404],{"class":385},[209,543,407],{"class":343},[209,545,410],{"class":215},[209,547,413],{"class":385},[209,549,416],{"class":385},[209,551,419],{"class":222},[209,553,555,558,560,562,564,567],{"class":211,"line":554},15,[209,556,557],{"class":215},"        RepositoryId ",[209,559,382],{"class":343},[209,561,264],{"class":215},[209,563,294],{"class":222},[209,565,566],{"class":215},"Id",[209,568,419],{"class":222},[209,570,572,575,577,581],{"class":211,"line":571},16,[209,573,574],{"class":215},"        PullRequestNumber ",[209,576,382],{"class":343},[209,578,580],{"class":579},"srdBf"," 1",[209,582,419],{"class":222},[209,584,586,589,591,593,596,598],{"class":211,"line":585},17,[209,587,588],{"class":215},"        Title ",[209,590,382],{"class":343},[209,592,429],{"class":385},[209,594,595],{"class":389},"Pull request 1",[209,597,416],{"class":385},[209,599,419],{"class":222},[209,601,603,606,608,610,613,615],{"class":211,"line":602},18,[209,604,605],{"class":215},"        Branch ",[209,607,382],{"class":343},[209,609,429],{"class":385},[209,611,612],{"class":389},"feature\u002F1",[209,614,416],{"class":385},[209,616,419],{"class":222},[209,618,620,623,625,627],{"class":211,"line":619},19,[209,621,622],{"class":215},"        IsDraft ",[209,624,382],{"class":343},[209,626,464],{"class":463},[209,628,419],{"class":222},[209,630,632,635,637,640,642,645],{"class":211,"line":631},20,[209,633,634],{"class":215},"        State ",[209,636,382],{"class":343},[209,638,639],{"class":215}," PullRequestState",[209,641,294],{"class":222},[209,643,644],{"class":215},"Open",[209,646,419],{"class":222},[209,648,650],{"class":211,"line":649},21,[209,651,652],{"class":222},"    },\n",[209,654,656,658],{"class":211,"line":655},22,[209,657,509],{"class":343},[209,659,512],{"class":263},[209,661,663],{"class":211,"line":662},23,[209,664,518],{"class":222},[209,666,668,670,672,674,676,678,680,682,684,686,688,690,692,694],{"class":211,"line":667},24,[209,669,524],{"class":215},[209,671,382],{"class":343},[209,673,386],{"class":385},[209,675,531],{"class":389},[209,677,393],{"class":385},[209,679,396],{"class":215},[209,681,294],{"class":385},[209,683,401],{"class":226},[209,685,404],{"class":385},[209,687,407],{"class":343},[209,689,410],{"class":215},[209,691,413],{"class":385},[209,693,416],{"class":385},[209,695,419],{"class":222},[209,697,699,701,703,705,707,709],{"class":211,"line":698},25,[209,700,557],{"class":215},[209,702,382],{"class":343},[209,704,264],{"class":215},[209,706,294],{"class":222},[209,708,566],{"class":215},[209,710,419],{"class":222},[209,712,714,716,718,721],{"class":211,"line":713},26,[209,715,574],{"class":215},[209,717,382],{"class":343},[209,719,720],{"class":579}," 2",[209,722,419],{"class":222},[209,724,726,728,730,732,735,737],{"class":211,"line":725},27,[209,727,588],{"class":215},[209,729,382],{"class":343},[209,731,429],{"class":385},[209,733,734],{"class":389},"Pull request 2",[209,736,416],{"class":385},[209,738,419],{"class":222},[209,740,742,744,746,748,751,753],{"class":211,"line":741},28,[209,743,605],{"class":215},[209,745,382],{"class":343},[209,747,429],{"class":385},[209,749,750],{"class":389},"feature\u002F2",[209,752,416],{"class":385},[209,754,419],{"class":222},[209,756,758,760,762,764,766,768],{"class":211,"line":757},29,[209,759,634],{"class":215},[209,761,382],{"class":343},[209,763,639],{"class":215},[209,765,294],{"class":222},[209,767,306],{"class":215},[209,769,419],{"class":222},[209,771,773],{"class":211,"line":772},30,[209,774,652],{"class":222},[209,776,778],{"class":211,"line":777},31,[209,779,484],{"class":222},[209,781,783],{"class":211,"line":782},32,[209,784,316],{"emptyLinePlaceholder":315},[209,786,788],{"class":211,"line":787},33,[209,789,322],{"class":243},[791,792,793],"tip",{},[181,794,795,796,798,799,803,804,807],{},"Call ",[185,797,191],{}," only when you need a ",[800,801,802],"strong",{},"save"," or the ",[800,805,806],{},"save hooks",". For a pure function over entities, building is enough.",[176,809,811],{"id":810},"when-you-still-want-a-store","When you still want a store",[181,813,814,815,818],{},"A ",[185,816,817],{},"RecordingStore"," is a handy test double: it captures the rows Biome would save, so you can assert on order and exclusions without a database. The library's own tests use it:",[197,820,824],{"className":199,"code":821,"filename":822,"highlights":823,"language":204,"meta":205,"style":205},"internal sealed class RecordingStore : IBiomeStore\n{\n    internal List\u003Cobject> Entities { get; } = [];\n\n    public ValueTask SaveAsync(\n        IReadOnlyList\u003Cobject> entities,\n        CancellationToken cancellationToken\n    )\n    {\n        Entities.AddRange(entities);\n        return ValueTask.CompletedTask;\n    }\n}\n","RecordingStore.cs",[487],[185,825,826,846,850,887,891,905,921,929,934,938,956,971,976],{"__ignoreMap":205},[209,827,828,831,834,837,840,843],{"class":211,"line":212},[209,829,830],{"class":233},"internal",[209,832,833],{"class":233}," sealed",[209,835,836],{"class":259}," class",[209,838,839],{"class":263}," RecordingStore",[209,841,842],{"class":222}," :",[209,844,845],{"class":263}," IBiomeStore\n",[209,847,848],{"class":211,"line":219},[209,849,374],{"class":222},[209,851,852,855,858,861,864,867,870,873,876,879,882,884],{"class":211,"line":247},[209,853,854],{"class":233},"    internal",[209,856,857],{"class":263}," List",[209,859,860],{"class":222},"\u003C",[209,862,863],{"class":343},"object",[209,865,866],{"class":222},">",[209,868,869],{"class":263}," Entities",[209,871,872],{"class":222}," {",[209,874,875],{"class":259}," get",[209,877,878],{"class":222},";",[209,880,881],{"class":222}," }",[209,883,344],{"class":343},[209,885,886],{"class":222}," [];\n",[209,888,889],{"class":211,"line":203},[209,890,316],{"emptyLinePlaceholder":315},[209,892,893,896,899,902],{"class":211,"line":312},[209,894,895],{"class":233},"    public",[209,897,898],{"class":263}," ValueTask",[209,900,901],{"class":226}," SaveAsync",[209,903,904],{"class":222},"(\n",[209,906,907,910,912,914,916,919],{"class":211,"line":319},[209,908,909],{"class":263},"        IReadOnlyList",[209,911,860],{"class":222},[209,913,863],{"class":343},[209,915,866],{"class":222},[209,917,918],{"class":263}," entities",[209,920,419],{"class":222},[209,922,923,926],{"class":211,"line":455},[209,924,925],{"class":263},"        CancellationToken",[209,927,928],{"class":263}," cancellationToken\n",[209,930,931],{"class":211,"line":469},[209,932,933],{"class":222},"    )\n",[209,935,936],{"class":211,"line":481},[209,937,518],{"class":222},[209,939,941,944,946,949,951,954],{"class":940,"line":487},[211,271],[209,942,943],{"class":215},"        Entities",[209,945,294],{"class":222},[209,947,948],{"class":226},"AddRange",[209,950,230],{"class":222},[209,952,953],{"class":215},"entities",[209,955,309],{"class":222},[209,957,958,962,964,966,969],{"class":211,"line":501},[209,959,961],{"class":960},"sVHd0","        return",[209,963,898],{"class":215},[209,965,294],{"class":222},[209,967,968],{"class":215},"CompletedTask",[209,970,355],{"class":222},[209,972,973],{"class":211,"line":506},[209,974,975],{"class":222},"    }\n",[209,977,978],{"class":211,"line":515},[209,979,980],{"class":222},"}\n",[197,982,986],{"className":199,"code":983,"filename":984,"highlights":985,"language":204,"meta":205,"style":205},"var store = new RecordingStore();\nvar biome = TestBiome.Start(out var seed, store);\n\nawait biome.AddLockedReview(out var activeLock).BuildAsync();\n\n\u002F\u002F seed rows precede the four created rows\n\u002F\u002F store.Entities[0] == seed.Owner; store.Entities[1] == seed.Organization;\n\u002F\u002F store.Entities.Count == 6\n","CodeReviewTests.cs",[212,219],[185,987,988,1005,1037,1041,1069,1073,1078,1083],{"__ignoreMap":205},[209,989,991,993,996,998,1000,1002],{"class":990,"line":212},[211,271],[209,992,337],{"class":259},[209,994,995],{"class":263}," store",[209,997,344],{"class":343},[209,999,366],{"class":343},[209,1001,839],{"class":263},[209,1003,1004],{"class":222},"();\n",[209,1006,1008,1010,1013,1015,1018,1020,1022,1024,1026,1028,1031,1033,1035],{"class":1007,"line":219},[211,271],[209,1009,337],{"class":259},[209,1011,1012],{"class":263}," biome",[209,1014,344],{"class":343},[209,1016,1017],{"class":215}," TestBiome",[209,1019,294],{"class":222},[209,1021,227],{"class":226},[209,1023,230],{"class":222},[209,1025,234],{"class":233},[209,1027,260],{"class":259},[209,1029,1030],{"class":263}," seed",[209,1032,288],{"class":222},[209,1034,995],{"class":215},[209,1036,309],{"class":222},[209,1038,1039],{"class":211,"line":247},[209,1040,316],{"emptyLinePlaceholder":315},[209,1042,1043,1046,1048,1050,1053,1055,1057,1059,1062,1065,1067],{"class":211,"line":203},[209,1044,1045],{"class":343},"await",[209,1047,1012],{"class":215},[209,1049,294],{"class":222},[209,1051,1052],{"class":226},"AddLockedReview",[209,1054,230],{"class":222},[209,1056,234],{"class":233},[209,1058,260],{"class":259},[209,1060,1061],{"class":263}," activeLock",[209,1063,1064],{"class":222},").",[209,1066,191],{"class":226},[209,1068,1004],{"class":222},[209,1070,1071],{"class":211,"line":312},[209,1072,316],{"emptyLinePlaceholder":315},[209,1074,1075],{"class":211,"line":319},[209,1076,1077],{"class":243},"\u002F\u002F seed rows precede the four created rows\n",[209,1079,1080],{"class":211,"line":455},[209,1081,1082],{"class":243},"\u002F\u002F store.Entities[0] == seed.Owner; store.Entities[1] == seed.Organization;\n",[209,1084,1085],{"class":211,"line":469},[209,1086,1087],{"class":243},"\u002F\u002F store.Entities.Count == 6\n",[176,1089,1091],{"id":1090},"inspecting-what-was-built","Inspecting what was built",[181,1093,1094],{},"Keep the starting builder when you want entities a helper created, without naming each:",[197,1096,1100],{"className":199,"code":1097,"filename":1098,"highlights":1099,"language":204,"meta":205,"style":205},"var biome = TestBiome.Start(out _);\nawait biome.AddLockedReview(out var activeLock).BuildAsync();\n\nvar review = biome.Last\u003CCodeReviewRecord>(); \u002F\u002F created by the helper\n\u002F\u002F creation order; includes transients; excludes seed rows\nvar repos = biome.All\u003CCodeRepository>();\n","Inspect",[203,319],[185,1101,1102,1124,1148,1152,1180,1185],{"__ignoreMap":205},[209,1103,1104,1106,1108,1110,1112,1114,1116,1118,1120,1122],{"class":211,"line":212},[209,1105,337],{"class":259},[209,1107,1012],{"class":263},[209,1109,344],{"class":343},[209,1111,1017],{"class":215},[209,1113,294],{"class":222},[209,1115,227],{"class":226},[209,1117,230],{"class":222},[209,1119,234],{"class":233},[209,1121,237],{"class":215},[209,1123,309],{"class":222},[209,1125,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146],{"class":211,"line":219},[209,1127,1045],{"class":343},[209,1129,1012],{"class":215},[209,1131,294],{"class":222},[209,1133,1052],{"class":226},[209,1135,230],{"class":222},[209,1137,234],{"class":233},[209,1139,260],{"class":259},[209,1141,1061],{"class":263},[209,1143,1064],{"class":222},[209,1145,191],{"class":226},[209,1147,1004],{"class":222},[209,1149,1150],{"class":211,"line":247},[209,1151,316],{"emptyLinePlaceholder":315},[209,1153,1155,1157,1160,1162,1164,1166,1169,1171,1174,1177],{"class":1154,"line":203},[211,271],[209,1156,337],{"class":259},[209,1158,1159],{"class":263}," review",[209,1161,344],{"class":343},[209,1163,1012],{"class":215},[209,1165,294],{"class":222},[209,1167,1168],{"class":226},"Last",[209,1170,860],{"class":222},[209,1172,1173],{"class":263},"CodeReviewRecord",[209,1175,1176],{"class":222},">();",[209,1178,1179],{"class":243}," \u002F\u002F created by the helper\n",[209,1181,1182],{"class":211,"line":312},[209,1183,1184],{"class":243},"\u002F\u002F creation order; includes transients; excludes seed rows\n",[209,1186,1188,1190,1193,1195,1197,1199,1202,1204,1207],{"class":1187,"line":319},[211,271],[209,1189,337],{"class":259},[209,1191,1192],{"class":263}," repos",[209,1194,344],{"class":343},[209,1196,1012],{"class":215},[209,1198,294],{"class":222},[209,1200,1201],{"class":226},"All",[209,1203,860],{"class":222},[209,1205,1206],{"class":263},"CodeRepository",[209,1208,1209],{"class":222},">();\n",[1211,1212,1213],"note",{},[181,1214,1215,1218,1219,1222,1223,1226,1227,1229,1230,1232,1233,1235],{},[185,1216,1217],{},"All\u003CT>()"," and ",[185,1220,1221],{},"Last\u003CT>()"," include ",[800,1224,1225],{},"transient entities and aggregate wrappers",", but not seed rows. Prefer naming entities with ",[185,1228,234],{}," when the test is about them, and use ",[185,1231,1201],{}," \u002F ",[185,1234,1168],{}," for entities that helpers create.",[1237,1238,1239],"style",{},"html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sG8yY, html code.shiki .sG8yY{--shiki-light:#E2931D;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}",{"title":205,"searchDepth":212,"depth":219,"links":1241},[1242,1243,1244],{"id":178,"depth":219,"text":179},{"id":810,"depth":219,"text":811},{"id":1090,"depth":219,"text":1091},"Use Biome without a store, for pure unit tests.","md",null,{},{"icon":93},{"title":90,"description":1245},"N1pRyulKtlrsNVcNxExTNSIy532OK7gZfq9Cdrt39go",[1253,1255],{"title":85,"path":86,"stem":87,"description":1254,"icon":88,"children":-1},"Save a biome through a DbContext with one SaveChangesAsync.",{"title":95,"path":96,"stem":97,"description":1256,"icon":98,"children":-1},"Generated graft methods keep chains short. Named scenario helpers keep repeated chains explicit.",1791831052575]