ngOptions as well as ngRepeat both support iterating over collections as well as objects, which is important for your data. Those DynamicProductName values are really just keys within the products object.
The basic syntax for using ngOptions in this situation is:
<select ng-model="test" ng-options="key as value for (key , value) in data"></select>
In this case, key would be what would be stored in your model while value would be displayed within the select.
Your value is slightly more nested and thus would be: value.attributes.location.
If you would prefer to have the value (possibly more relevant data), then you could change the code to:
<select
data-ng-model="test"
data-ng-options="value as value.attributes.location for (key , value) in todos.products"
>
</select>