@@ -892,6 +892,55 @@ class TestTransactionConfig(
892892 TestVpnX509Mixin ,
893893 TransactionTestCase ,
894894):
895+ def test_multiple_vpn_templates_same_vpn (self ):
896+ vpn1 = self ._create_vpn (name = 'vpn1' )
897+ vpn2 = self ._create_vpn (name = 'vpn2' )
898+ vpn1_template1 = self ._create_template (
899+ name = 'vpn1-template1' , type = 'vpn' , vpn = vpn1
900+ )
901+ vpn1_template2 = self ._create_template (
902+ name = 'vpn1-template2' , type = 'vpn' , vpn = vpn1
903+ )
904+ vpn2_template1 = self ._create_template (
905+ name = 'vpn2-template1' , type = 'vpn' , vpn = vpn2
906+ )
907+ vpn2_template2 = self ._create_template (
908+ name = 'vpn2-template2' , type = 'vpn' , vpn = vpn2
909+ )
910+ vpn2_template3 = self ._create_template (
911+ name = 'vpn2-template3' , type = 'vpn' , vpn = vpn2
912+ )
913+ config = self ._create_config (device = self ._create_device ())
914+ config .templates .add (vpn1_template1 )
915+ with self .subTest ('Adding template one by one' ):
916+ with self .assertRaises (ValidationError ) as context_manager :
917+ config .templates .add (vpn1_template2 )
918+ self .assertEqual (
919+ context_manager .exception .message ,
920+ 'You cannot select multiple VPN client templates related to the'
921+ ' same VPN server.\n '
922+ 'The templates "vpn1-template1" and "vpn1-template2" are all'
923+ ' linked to the same VPN server: "vpn1".' ,
924+ )
925+
926+ with self .subTest ('Add duplicate templates for multiple VPN' ):
927+ config .refresh_from_db ()
928+ self .assertEqual (config .templates .count (), 1 )
929+ self .assertEqual (config .vpnclient_set .count (), 1 )
930+ with self .assertRaises (ValidationError ) as context_manager :
931+ config .templates .add (
932+ vpn1_template2 , vpn2_template1 , vpn2_template2 , vpn2_template3
933+ )
934+ self .assertEqual (
935+ context_manager .exception .message ,
936+ 'You cannot select multiple VPN client templates related to the'
937+ ' same VPN server.\n '
938+ 'The templates "vpn1-template1" and "vpn1-template2" are all'
939+ ' linked to the same VPN server: "vpn1".\n '
940+ 'The templates "vpn2-template1", "vpn2-template2" and "vpn2-template3"'
941+ ' are all linked to the same VPN server: "vpn2".' ,
942+ )
943+
895944 def test_certificate_renew_invalidates_checksum_cache (self ):
896945 config = self ._create_config (organization = self ._get_org ())
897946 vpn_template = self ._create_template (
0 commit comments