This is related to the question posed by the OP of this
thread:
https://coderanch.com/t/729390/engineering/Design-pattern-good-command-pattern as well as this one
https://coderanch.com/t/729560/engineering/Test-Driven-Development-money-maker
The problem OP is trying to solve can be described as follows:
1. There is a web page that provides various ways of searching for things
2. Search criteria can vary in type and number of parameters
3. It should be possible to combine different types of criteria into a single search
4. It should be easy to add new search types
5. Search criteria should be reusable
The challenge: come up with a design that satisfies all of the above and do it in a TDD manner.