A type theory satisfies the canonicity property exactly when there are normalization functions at closed terms of ground type. See the canonicity section of the normalization page for more information.
A type theory with normalization does not necessarily satisfy canonicity, mostly because the normal forms are not always "canonical". An example is the type theory of Arend, where a primitive function coe
may not reduce for canonical arguments. However, the overall system is considered to be normalizing (no fully formalized proof yet) because terms reduce to unique "normal forms" which may not be canonical.