My contract does not guarantee any minimum hours and it is says I am on no fixed or normal hours, but I have been working two days a week consistently with no gaps at all in the last two years. Also I have been covering some holidays. They have already given one of my days of work to my colleague who is on a normal contract. The only reason they did that is because she is on a permanent contract and I am not. How is this fair?
It seems that you have a Zero Hours Contract, which would enable your employer to offer a different number of hours in any given week for any reason (provided that did not discriminate because of a protected characteristic, such as sex or race).
The only way you could challenge the decision to give the hours to your colleague on a “permanent” contract is to suggest that your written contract is in some way a sham and did not reflect the real agreement to work two days per week. That might be undermined by the fact that you have worked additional hours to cover holidays, which tends to support an argument by your employer that you have a true Zero Hours arrangement.