{
	"info": {
		"_postman_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
		"name": "Enhanced Tech Stack Selector - Migrated Version",
		"description": "Complete Postman collection for the Enhanced Tech Stack Selector API v15.0.0\n\nThis collection includes all endpoints for:\n- Health checks and diagnostics\n- Tech stack recommendations\n- Price tier analysis\n- Technology and tool queries\n- Data integrity validation\n- Compatibility analysis\n\nBase URL: http://localhost:8002",
		"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
		"_exporter_id": "12345678"
	},
	"item": [
		{
			"name": "Health & Diagnostics",
			"item": [
				{
					"name": "Health Check",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Response has required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('status');",
									"    pm.expect(jsonData).to.have.property('service');",
									"    pm.expect(jsonData).to.have.property('version');",
									"    pm.expect(jsonData).to.have.property('features');",
									"});",
									"",
									"pm.test(\"Service is healthy\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.status).to.eql('healthy');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/health",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"health"
							]
						},
						"description": "Basic health check endpoint to verify the service is running"
					},
					"response": []
				},
				{
					"name": "Diagnostics",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Diagnostics response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('service');",
									"    pm.expect(jsonData).to.have.property('version');",
									"    pm.expect(jsonData).to.have.property('checks');",
									"    pm.expect(jsonData.checks).to.have.property('neo4j');",
									"});",
									"",
									"pm.test(\"Neo4j connection status\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.checks.neo4j).to.have.property('status');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/diagnostics",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"diagnostics"
							]
						},
						"description": "Comprehensive diagnostics including Neo4j connection status and data integrity checks"
					},
					"response": []
				}
			],
			"description": "Health and diagnostics endpoints"
		},
		{
			"name": "Recommendations",
			"item": [
				{
					"name": "Get Best Recommendations",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Recommendations response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('recommendations');",
									"    pm.expect(jsonData).to.have.property('count');",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Recommendations array is not empty\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.recommendations).to.be.an('array');",
									"    pm.expect(jsonData.count).to.be.above(0);",
									"});",
									"",
									"pm.test(\"Each recommendation has required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.recommendations.length > 0) {",
									"        const firstRec = jsonData.recommendations[0];",
									"        pm.expect(firstRec).to.have.property('stack_name');",
									"        pm.expect(firstRec).to.have.property('monthly_cost');",
									"        pm.expect(firstRec).to.have.property('frontend');",
									"        pm.expect(firstRec).to.have.property('backend');",
									"        pm.expect(firstRec).to.have.property('database');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							},
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"domain\": \"web development\",\n  \"budget\": 500.0,\n  \"preferredTechnologies\": [\"React\", \"Node.js\", \"PostgreSQL\"]\n}"
						},
						"url": {
							"raw": "{{base_url}}/recommend/best",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"recommend",
								"best"
							]
						},
						"description": "Get the best tech stack recommendations based on budget, domain, and preferred technologies"
					},
					"response": []
				},
				{
					"name": "Get Recommendations - E-commerce",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Domain-specific recommendations\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.domain).to.eql('e-commerce');",
									"    pm.expect(jsonData.budget).to.eql(1000);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"domain\": \"e-commerce\",\n  \"budget\": 1000.0,\n  \"preferredTechnologies\": [\"Vue.js\", \"Django\", \"Redis\"]\n}"
						},
						"url": {
							"raw": "{{base_url}}/recommend/best",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"recommend",
								"best"
							]
						},
						"description": "Get recommendations specifically for e-commerce domain with higher budget"
					},
					"response": []
				},
				{
					"name": "Get Recommendations - Startup Budget",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Low budget recommendations\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData.budget).to.eql(100);",
									"    if (jsonData.recommendations.length > 0) {",
									"        jsonData.recommendations.forEach(rec => {",
									"            pm.expect(rec.monthly_cost).to.be.at.most(100);",
									"        });",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "POST",
						"header": [
							{
								"key": "Content-Type",
								"value": "application/json"
							}
						],
						"body": {
							"mode": "raw",
							"raw": "{\n  \"domain\": \"startup\",\n  \"budget\": 100.0\n}"
						},
						"url": {
							"raw": "{{base_url}}/recommend/best",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"recommend",
								"best"
							]
						},
						"description": "Get recommendations for startup with limited budget"
					},
					"response": []
				}
			],
			"description": "Tech stack recommendation endpoints"
		},
		{
			"name": "Price Tiers",
			"item": [
				{
					"name": "Get All Price Tiers",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Price tiers response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('price_tiers');",
									"    pm.expect(jsonData).to.have.property('count');",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Price tiers have required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.price_tiers.length > 0) {",
									"        const firstTier = jsonData.price_tiers[0];",
									"        pm.expect(firstTier).to.have.property('tier_name');",
									"        pm.expect(firstTier).to.have.property('min_price');",
									"        pm.expect(firstTier).to.have.property('max_price');",
									"        pm.expect(firstTier).to.have.property('target_audience');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/price-tiers",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"price-tiers"
							]
						},
						"description": "Get analysis of all price tiers with technology and tool counts"
					},
					"response": []
				}
			],
			"description": "Price tier analysis endpoints"
		},
		{
			"name": "Technologies",
			"item": [
				{
					"name": "Get Technologies by Tier - Free",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Technologies response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('tier_name');",
									"    pm.expect(jsonData).to.have.property('technologies');",
									"    pm.expect(jsonData.tier_name).to.eql('Free');",
									"});",
									"",
									"pm.test(\"Technologies have required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.technologies.length > 0) {",
									"        const firstTech = jsonData.technologies[0];",
									"        pm.expect(firstTech).to.have.property('name');",
									"        pm.expect(firstTech).to.have.property('category');",
									"        pm.expect(firstTech).to.have.property('monthly_cost');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/technologies/Free",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"technologies",
								"Free"
							]
						},
						"description": "Get all technologies in the Free price tier"
					},
					"response": []
				},
				{
					"name": "Get Technologies by Tier - Micro Budget",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/technologies/Micro%20Budget",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"technologies",
								"Micro Budget"
							]
						},
						"description": "Get all technologies in the Micro Budget price tier"
					},
					"response": []
				},
				{
					"name": "Get Technologies by Tier - Startup Budget",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/technologies/Startup%20Budget",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"technologies",
								"Startup Budget"
							]
						},
						"description": "Get all technologies in the Startup Budget price tier"
					},
					"response": []
				},
				{
					"name": "Get Technologies by Tier - Growth Stage",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/technologies/Growth%20Stage",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"technologies",
								"Growth Stage"
							]
						},
						"description": "Get all technologies in the Growth Stage price tier"
					},
					"response": []
				}
			],
			"description": "Technology queries by price tier"
		},
		{
			"name": "Tools",
			"item": [
				{
					"name": "Get Tools by Tier - Free",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Tools response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('tier_name');",
									"    pm.expect(jsonData).to.have.property('tools');",
									"    pm.expect(jsonData.tier_name).to.eql('Free');",
									"});",
									"",
									"pm.test(\"Tools have required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.tools.length > 0) {",
									"        const firstTool = jsonData.tools[0];",
									"        pm.expect(firstTool).to.have.property('name');",
									"        pm.expect(firstTool).to.have.property('category');",
									"        pm.expect(firstTool).to.have.property('monthly_cost');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/tools/Free",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"tools",
								"Free"
							]
						},
						"description": "Get all tools in the Free price tier"
					},
					"response": []
				},
				{
					"name": "Get Tools by Tier - Micro Budget",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/tools/Micro%20Budget",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"tools",
								"Micro Budget"
							]
						},
						"description": "Get all tools in the Micro Budget price tier"
					},
					"response": []
				},
				{
					"name": "Get Tools by Tier - Startup Budget",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/tools/Startup%20Budget",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"tools",
								"Startup Budget"
							]
						},
						"description": "Get all tools in the Startup Budget price tier"
					},
					"response": []
				},
				{
					"name": "Get Tools by Tier - Growth Stage",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/tools/Growth%20Stage",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"tools",
								"Growth Stage"
							]
						},
						"description": "Get all tools in the Growth Stage price tier"
					},
					"response": []
				}
			],
			"description": "Tool queries by price tier"
		},
		{
			"name": "Analysis & Optimization",
			"item": [
				{
					"name": "Get Optimal Combinations - Frontend",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Optimal combinations response\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('combinations');",
									"    pm.expect(jsonData).to.have.property('budget');",
									"    pm.expect(jsonData).to.have.property('category');",
									"    pm.expect(jsonData.category).to.eql('frontend');",
									"});",
									"",
									"pm.test(\"All combinations within budget\", function () {",
									"    const jsonData = pm.response.json();",
									"    const budget = jsonData.budget;",
									"    if (jsonData.combinations.length > 0) {",
									"        jsonData.combinations.forEach(combo => {",
									"            pm.expect(combo.monthly_cost).to.be.at.most(budget);",
									"        });",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/combinations/optimal?budget=300&category=frontend",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"combinations",
								"optimal"
							],
							"query": [
								{
									"key": "budget",
									"value": "300"
								},
								{
									"key": "category",
									"value": "frontend"
								}
							]
						},
						"description": "Get optimal frontend technology combinations within budget"
					},
					"response": []
				},
				{
					"name": "Get Optimal Combinations - Backend",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/combinations/optimal?budget=500&category=backend",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"combinations",
								"optimal"
							],
							"query": [
								{
									"key": "budget",
									"value": "500"
								},
								{
									"key": "category",
									"value": "backend"
								}
							]
						},
						"description": "Get optimal backend technology combinations within budget"
					},
					"response": []
				},
				{
					"name": "Get Optimal Combinations - Database",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/combinations/optimal?budget=200&category=database",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"combinations",
								"optimal"
							],
							"query": [
								{
									"key": "budget",
									"value": "200"
								},
								{
									"key": "category",
									"value": "database"
								}
							]
						},
						"description": "Get optimal database technology combinations within budget"
					},
					"response": []
				}
			],
			"description": "Analysis and optimization endpoints"
		},
		{
			"name": "Compatibility",
			"item": [
				{
					"name": "Get Compatibility - React",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Compatibility response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('tech_name');",
									"    pm.expect(jsonData).to.have.property('compatible_technologies');",
									"    pm.expect(jsonData.tech_name).to.eql('React');",
									"});",
									"",
									"pm.test(\"Compatible technologies have scores\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.compatible_technologies.length > 0) {",
									"        const firstCompat = jsonData.compatible_technologies[0];",
									"        pm.expect(firstCompat).to.have.property('compatible_tech');",
									"        pm.expect(firstCompat).to.have.property('score');",
									"        pm.expect(firstCompat).to.have.property('category');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/compatibility/React",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"compatibility",
								"React"
							]
						},
						"description": "Get compatibility analysis for React technology"
					},
					"response": []
				},
				{
					"name": "Get Compatibility - Node.js",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/compatibility/Node.js",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"compatibility",
								"Node.js"
							]
						},
						"description": "Get compatibility analysis for Node.js technology"
					},
					"response": []
				},
				{
					"name": "Get Compatibility - PostgreSQL",
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/compatibility/PostgreSQL",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"compatibility",
								"PostgreSQL"
							]
						},
						"description": "Get compatibility analysis for PostgreSQL database"
					},
					"response": []
				}
			],
			"description": "Technology compatibility analysis"
		},
		{
			"name": "Data Validation",
			"item": [
				{
					"name": "Validate Data Integrity",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Data integrity response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('integrity_check');",
									"    pm.expect(jsonData).to.have.property('summary');",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Summary has stack counts\", function () {",
									"    const jsonData = pm.response.json();",
									"    const summary = jsonData.summary;",
									"    pm.expect(summary).to.have.property('total_stacks');",
									"    pm.expect(summary).to.have.property('complete_stacks');",
									"    pm.expect(summary).to.have.property('incomplete_stacks');",
									"    pm.expect(summary.total_stacks).to.be.a('number');",
									"});",
									"",
									"pm.test(\"Stack counts are consistent\", function () {",
									"    const jsonData = pm.response.json();",
									"    const summary = jsonData.summary;",
									"    pm.expect(summary.complete_stacks + summary.incomplete_stacks)",
									"        .to.eql(summary.total_stacks);",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/validate/integrity",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"validate",
								"integrity"
							]
						},
						"description": "Validate the integrity of migrated data in Neo4j"
					},
					"response": []
				},
				{
					"name": "Validate Stack Completeness",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Stack completeness response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('validation_results');",
									"    pm.expect(jsonData).to.have.property('incomplete_stacks');",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Validation results have required fields\", function () {",
									"    const jsonData = pm.response.json();",
									"    const results = jsonData.validation_results;",
									"    pm.expect(results).to.have.property('total_stacks');",
									"    pm.expect(results).to.have.property('complete_stacks');",
									"    pm.expect(results).to.have.property('incomplete_count');",
									"});",
									"",
									"pm.test(\"Incomplete stacks have missing components\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.incomplete_stacks.length > 0) {",
									"        const firstIncomplete = jsonData.incomplete_stacks[0];",
									"        pm.expect(firstIncomplete).to.have.property('stack_name');",
									"        pm.expect(firstIncomplete).to.have.property('missing_components');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/validate/stacks",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"validate",
								"stacks"
							]
						},
						"description": "Validate that all tech stacks have complete frontend, backend, and database components"
					},
					"response": []
				},
				{
					"name": "Validate Price Consistency",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Price consistency response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('price_validation');",
									"    pm.expect(jsonData).to.have.property('inconsistencies');",
									"    pm.expect(jsonData.success).to.be.true;",
									"});",
									"",
									"pm.test(\"Price validation summary\", function () {",
									"    const jsonData = pm.response.json();",
									"    const validation = jsonData.price_validation;",
									"    pm.expect(validation).to.have.property('total_stacks_checked');",
									"    pm.expect(validation).to.have.property('consistent_stacks');",
									"    pm.expect(validation).to.have.property('inconsistent_count');",
									"});",
									"",
									"pm.test(\"Inconsistencies have details\", function () {",
									"    const jsonData = pm.response.json();",
									"    if (jsonData.inconsistencies.length > 0) {",
									"        const firstInconsistency = jsonData.inconsistencies[0];",
									"        pm.expect(firstInconsistency).to.have.property('stack_name');",
									"        pm.expect(firstInconsistency).to.have.property('calculated_cost');",
									"        pm.expect(firstInconsistency).to.have.property('stored_cost');",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/validate/prices",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"validate",
								"prices"
							]
						},
						"description": "Validate price consistency between calculated and stored monthly costs"
					},
					"response": []
				}
			],
			"description": "Data validation and integrity checks"
		},
		{
			"name": "Search & Filtering",
			"item": [
				{
					"name": "Search Technologies",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Search response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('query');",
									"    pm.expect(jsonData).to.have.property('results');",
									"    pm.expect(jsonData).to.have.property('count');",
									"});",
									"",
									"pm.test(\"Search results contain query term\", function () {",
									"    const jsonData = pm.response.json();",
									"    const query = jsonData.query.toLowerCase();",
									"    if (jsonData.results.length > 0) {",
									"        jsonData.results.forEach(result => {",
									"            const name = result.name.toLowerCase();",
									"            const category = result.category.toLowerCase();",
									"            pm.expect(name.includes(query) || category.includes(query)).to.be.true;",
									"        });",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/search/technologies?q=javascript",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"search",
								"technologies"
							],
							"query": [
								{
									"key": "q",
									"value": "javascript"
								}
							]
						},
						"description": "Search technologies by name or category"
					},
					"response": []
				},
				{
					"name": "Search Tools",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Tools search response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('query');",
									"    pm.expect(jsonData).to.have.property('results');",
									"    pm.expect(jsonData).to.have.property('count');",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/search/tools?q=docker",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"search",
								"tools"
							],
							"query": [
								{
									"key": "q",
									"value": "docker"
								}
							]
						},
						"description": "Search tools by name or category"
					},
					"response": []
				},
				{
					"name": "Filter by Budget Range",
					"event": [
						{
							"listen": "test",
							"script": {
								"exec": [
									"pm.test(\"Status code is 200\", function () {",
									"    pm.response.to.have.status(200);",
									"});",
									"",
									"pm.test(\"Budget filter response structure\", function () {",
									"    const jsonData = pm.response.json();",
									"    pm.expect(jsonData).to.have.property('success');",
									"    pm.expect(jsonData).to.have.property('budget_range');",
									"    pm.expect(jsonData).to.have.property('stacks');",
									"    pm.expect(jsonData).to.have.property('count');",
									"});",
									"",
									"pm.test(\"All stacks within budget range\", function () {",
									"    const jsonData = pm.response.json();",
									"    const minBudget = jsonData.budget_range.min;",
									"    const maxBudget = jsonData.budget_range.max;",
									"    ",
									"    if (jsonData.stacks.length > 0) {",
									"        jsonData.stacks.forEach(stack => {",
									"            pm.expect(stack.monthly_cost).to.be.at.least(minBudget);",
									"            pm.expect(stack.monthly_cost).to.be.at.most(maxBudget);",
									"        });",
									"    }",
									"});"
								],
								"type": "text/javascript"
							}
						}
					],
					"request": {
						"method": "GET",
						"header": [
							{
								"key": "Accept",
								"value": "application/json"
							}
						],
						"url": {
							"raw": "{{base_url}}/api/filter/budget?min=100&max=500",
							"host": [
								"{{base_url}}"
							],
							"path": [
								"api",
								"filter",
								"budget"
							],
							"query": [
								{
									"key": "min",
									"value": "100"
								},
								{
									"key": "max",
									"value": "500"
								}
							]
						},
						"description": "Filter tech stacks by budget range"
					},
					"response": []
				}
			],
			"description": "Search and filtering endpoints"
		}
	],
	"event": [
		{
			"listen": "prerequest",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Set base URL if not already set",
					"if (!pm.environment.get('base_url')) {",
					"    pm.environment.set('base_url', 'http://localhost:8002');",
					"}",
					"",
					"// Add timestamp for unique test runs",
					"pm.environment.set('timestamp', new Date().toISOString());"
				]
			}
		},
		{
			"listen": "test",
			"script": {
				"type": "text/javascript",
				"exec": [
					"// Global test to ensure response time is reasonable",
					"pm.test(\"Response time is less than 5000ms\", function () {",
					"    pm.expect(pm.response.responseTime).to.be.below(5000);",
					"});",
					"",
					"// Global test to ensure content type is JSON for API endpoints",
					"const url = pm.request.url.toString();",
					"if (url.includes('/api/') || url.includes('/recommend/')) {",
					"    pm.test(\"Content-Type is application/json\", function () {",
					"        pm.expect(pm.response.headers.get('Content-Type')).to.include('application/json');",
					"    });",
					"}"
				]
			}
		}
	],
	"variable": [
		{
			"key": "base_url",
			"value": "http://localhost:8002",
			"type": "string",
			"description": "Base URL for the Enhanced Tech Stack Selector API"
		},
		{
			"key": "api_version",
			"value": "v15.0.0",
			"type": "string",
			"description": "Current API version"
		},
		{
			"key": "test_budget_low",
			"value": "100",
			"type": "string",
			"description": "Low budget for testing (startup tier)"
		},
		{
			"key": "test_budget_medium",
			"value": "500",
			"type": "string",
			"description": "Medium budget for testing (professional tier)"
		},
		{
			"key": "test_budget_high",
			"value": "1000",
			"type": "string",
			"description": "High budget for testing (enterprise tier)"
		}
	]
}