Since you have heat, the water pump is moving coolant.
Since the upper hose is rigid, that means it is under pressure.
Since the coolnat spews out under pressure from the filler cap and is cold when it should be warm, you know that coolant is not circulating through the radiator, but is circulating through the heater core.
That leaves only two likely possibilities:
1) The radiator is plugged. Remove it from the car and test for flow with a garden hose. You can try backflushing it and see if that helps.
2) The lower radiator hose is collapsed internally or is plugged (or the inlet to the WP is clogged). You can pull the hose for an out of car inspection. You can also look at it while the engine is running and see if it collapses when the engine heats up (but the radiator doesn't). If it does collapse, that means the radiator is clogged and the WP is essentially pulling a suction on the hose.
Steve