@@ -623,15 +623,9 @@ func (s *offerSuite) TestListApplicationOffers(c *tc.C) {
623623
624624domainFilters := []crossmodelrelationservice.OfferFilter {
625625{
626- OfferName :"hosted-db2" ,
627- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
628- AllowedConsumers :make ([]string ,0 ),
629- ConnectedUsers :make ([]string ,0 ),
626+ OfferName :"hosted-db2" ,
630627}, {
631- OfferName :"testing" ,
632- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
633- AllowedConsumers :make ([]string ,0 ),
634- ConnectedUsers :make ([]string ,0 ),
628+ OfferName :"testing" ,
635629},
636630}
637631charmLocator := charm.CharmLocator {
@@ -737,15 +731,9 @@ func (s *offerSuite) TestListApplicationOffersError(c *tc.C) {
737731
738732domainFilters := []crossmodelrelationservice.OfferFilter {
739733{
740- OfferName :"hosted-db2" ,
741- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
742- AllowedConsumers :make ([]string ,0 ),
743- ConnectedUsers :make ([]string ,0 ),
734+ OfferName :"hosted-db2" ,
744735}, {
745- OfferName :"testing" ,
746- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
747- AllowedConsumers :make ([]string ,0 ),
748- ConnectedUsers :make ([]string ,0 ),
736+ OfferName :"testing" ,
749737},
750738}
751739s .crossModelRelationService .EXPECT ().GetOffers (gomock .Any (),domainFilters ).Return (nil ,errors .New ("some error" ))
@@ -834,15 +822,9 @@ func (s *offerSuite) TestFindApplicationOffers(c *tc.C) {
834822
835823domainFilters := []crossmodelrelationservice.OfferFilter {
836824{
837- OfferName :"hosted-db2" ,
838- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
839- AllowedConsumers :make ([]string ,0 ),
840- ConnectedUsers :make ([]string ,0 ),
825+ OfferName :"hosted-db2" ,
841826}, {
842- OfferName :"testing" ,
843- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
844- AllowedConsumers :make ([]string ,0 ),
845- ConnectedUsers :make ([]string ,0 ),
827+ OfferName :"testing" ,
846828},
847829}
848830charmLocator := charm.CharmLocator {
@@ -925,6 +907,97 @@ func (s *offerSuite) TestFindApplicationOffers(c *tc.C) {
925907})
926908}
927909
910+ func (s * offerSuite )TestFindApplicationOffersAllOffers (c * tc.C ) {
911+ defer s .setupMocks (c ).Finish ()
912+
913+ // Arrange
914+ offerAPI := s .offerAPI (c )
915+ adminTag := s .setupAuthUser (user .AdminUserName .Name ())
916+ adminUser := user.User {DisplayName :"fred smith" }
917+ s .accessService .EXPECT ().GetUserByName (gomock .Any (),user .NameFromTag (adminTag )).Return (adminUser ,nil )
918+ s .expectEntityHasPermissionMissingPermission (adminTag ,permission .SuperuserAccess )
919+
920+ s .expectEntityHasPermission (adminTag ,permission .ReadAccess )
921+
922+ modelName := "prod"
923+ modelOwnerTag := names .NewUserTag ("fred@external" )
924+
925+ foundModel := model.Model {
926+ Name :modelName ,
927+ Qualifier :model .QualifierFromUserTag (modelOwnerTag ),
928+ UUID :modeltesting .GenModelUUID (c ),
929+ }
930+ s .modelService .EXPECT ().ListAllModels (gomock .Any ()).Return ([]model.Model {foundModel },nil )
931+ s .modelService .EXPECT ().GetModelByNameAndQualifier (gomock .Any (),modelName ,foundModel .Qualifier ).Return (foundModel ,nil )
932+
933+ charmLocator := charm.CharmLocator {
934+ Name :"app" ,
935+ Revision :42 ,
936+ Source :charm .CharmHubSource ,
937+ Architecture :architecture .AMD64 ,
938+ }
939+ offerDetails := []* crossmodelrelation.OfferDetail {
940+ {
941+ OfferUUID :uuid .MustNewUUID ().String (),
942+ OfferName :"hosted-db2" ,
943+ ApplicationName :"test-app" ,
944+ ApplicationDescription :"testing application" ,
945+ CharmLocator :charmLocator ,
946+ Endpoints : []crossmodelrelation.OfferEndpoint {
947+ {Name :"db" },
948+ },
949+ OfferUsers : []crossmodelrelation.OfferUser {{Name :"george" ,Access :permission .ConsumeAccess }},
950+ }, {
951+ OfferUUID :uuid .MustNewUUID ().String (),
952+ OfferName :"testing" ,
953+ ApplicationName :"test-app" ,
954+ ApplicationDescription :"testing application" ,
955+ CharmLocator :charmLocator ,
956+ Endpoints : []crossmodelrelation.OfferEndpoint {
957+ {Name :"endpoint" },
958+ },
959+ OfferUsers : []crossmodelrelation.OfferUser {{Name :"admin" ,Access :permission .AdminAccess }},
960+ },
961+ }
962+ s .crossModelRelationService .EXPECT ().GetOffers (gomock .Any (), []crossmodelrelationservice.OfferFilter {{}}).Return (offerDetails ,nil )
963+
964+ filters := params.OfferFilters {Filters : []params.OfferFilter {{}}}
965+
966+ // Act
967+ obtained ,err := offerAPI .FindApplicationOffers (c .Context (),filters )
968+
969+ // Assert
970+ c .Assert (err ,tc .IsNil )
971+ c .Assert (obtained .Results ,tc .HasLen ,2 )
972+ mc := tc .NewMultiChecker ()
973+ mc .AddExpr ("_.ApplicationOfferDetailsV5.SourceModelTag" ,tc .Ignore )
974+ mc .AddExpr ("_.ApplicationOfferDetailsV5.OfferUUID" ,tc .IsUUID )
975+ c .Check (obtained .Results [0 ],mc , params.ApplicationOfferAdminDetailsV5 {
976+ ApplicationOfferDetailsV5 : params.ApplicationOfferDetailsV5 {
977+ OfferURL :"fred-external/prod.hosted-db2" ,
978+ OfferName :"hosted-db2" ,
979+ ApplicationDescription :"testing application" ,
980+ Endpoints : []params.RemoteEndpoint {{Name :"db" }},
981+ Users : []params.OfferUserDetails {
982+ {UserName :"admin" ,DisplayName :"fred smith" ,Access :"admin" },
983+ }},
984+ ApplicationName :"test-app" ,
985+ CharmURL :"ch:amd64/app-42" ,
986+ })
987+ c .Check (obtained .Results [1 ],mc , params.ApplicationOfferAdminDetailsV5 {
988+ ApplicationOfferDetailsV5 : params.ApplicationOfferDetailsV5 {
989+ OfferURL :"fred-external/prod.testing" ,
990+ OfferName :"testing" ,
991+ ApplicationDescription :"testing application" ,
992+ Endpoints : []params.RemoteEndpoint {{Name :"endpoint" }},
993+ Users : []params.OfferUserDetails {
994+ {UserName :"admin" ,DisplayName :"fred smith" ,Access :"admin" },
995+ }},
996+ ApplicationName :"test-app" ,
997+ CharmURL :"ch:amd64/app-42" ,
998+ })
999+ }
1000+
9281001func (s * offerSuite )TestFindApplicationOffersPermission (c * tc.C ) {
9291002defer s .setupMocks (c ).Finish ()
9301003
@@ -986,15 +1059,9 @@ func (s *offerSuite) TestFindApplicationOffersError(c *tc.C) {
9861059
9871060domainFilters := []crossmodelrelationservice.OfferFilter {
9881061{
989- OfferName :"hosted-db2" ,
990- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
991- AllowedConsumers :make ([]string ,0 ),
992- ConnectedUsers :make ([]string ,0 ),
1062+ OfferName :"hosted-db2" ,
9931063}, {
994- OfferName :"testing" ,
995- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
996- AllowedConsumers :make ([]string ,0 ),
997- ConnectedUsers :make ([]string ,0 ),
1064+ OfferName :"testing" ,
9981065},
9991066}
10001067s .crossModelRelationService .EXPECT ().GetOffers (gomock .Any (),domainFilters ).Return (nil ,errors .New ("some error" ))
@@ -1109,15 +1176,9 @@ func (s *offerSuite) TestApplicationOffers(c *tc.C) {
11091176
11101177domainFilters := []crossmodelrelationservice.OfferFilter {
11111178{
1112- OfferName :"hosted-db2" ,
1113- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1114- AllowedConsumers :make ([]string ,0 ),
1115- ConnectedUsers :make ([]string ,0 ),
1179+ OfferName :"hosted-db2" ,
11161180}, {
1117- OfferName :"testing" ,
1118- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1119- AllowedConsumers :make ([]string ,0 ),
1120- ConnectedUsers :make ([]string ,0 ),
1181+ OfferName :"testing" ,
11211182},
11221183}
11231184charmLocator := charm.CharmLocator {
@@ -1216,10 +1277,7 @@ func (s *offerSuite) TestApplicationOffersMixSuccessAndFail(c *tc.C) {
12161277
12171278domainFilters := []crossmodelrelationservice.OfferFilter {
12181279{
1219- OfferName :"testing" ,
1220- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1221- AllowedConsumers :make ([]string ,0 ),
1222- ConnectedUsers :make ([]string ,0 ),
1280+ OfferName :"testing" ,
12231281},
12241282}
12251283charmLocator := charm.CharmLocator {
@@ -1294,10 +1352,7 @@ func (s *offerSuite) TestApplicationOffersNotFound(c *tc.C) {
12941352
12951353domainFilters := []crossmodelrelationservice.OfferFilter {
12961354{
1297- OfferName :"testing" ,
1298- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1299- AllowedConsumers :make ([]string ,0 ),
1300- ConnectedUsers :make ([]string ,0 ),
1355+ OfferName :"testing" ,
13011356},
13021357}
13031358offerDetails := []* crossmodelrelation.OfferDetail {}
@@ -1454,10 +1509,7 @@ func (s *offerSuite) testGetConsumeDetails(c *tc.C, userID string) {
14541509
14551510domainFilters := []crossmodelrelationservice.OfferFilter {
14561511{
1457- OfferName :"hosted-mysql" ,
1458- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1459- AllowedConsumers :make ([]string ,0 ),
1460- ConnectedUsers :make ([]string ,0 ),
1512+ OfferName :"hosted-mysql" ,
14611513},
14621514}
14631515charmLocator := charm.CharmLocator {
@@ -1551,10 +1603,7 @@ func (s *offerSuite) TestGetConsumeDetailsUser(c *tc.C) {
15511603
15521604domainFilters := []crossmodelrelationservice.OfferFilter {
15531605{
1554- OfferName :"hosted-mysql" ,
1555- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1556- AllowedConsumers :make ([]string ,0 ),
1557- ConnectedUsers :make ([]string ,0 ),
1606+ OfferName :"hosted-mysql" ,
15581607},
15591608}
15601609charmLocator := charm.CharmLocator {
@@ -1677,10 +1726,7 @@ func (s *offerSuite) TestGetConsumeDetailsNoOffers(c *tc.C) {
16771726
16781727domainFilters := []crossmodelrelationservice.OfferFilter {
16791728{
1680- OfferName :"hosted-mysql" ,
1681- Endpoints :make ([]crossmodelrelationservice.EndpointFilterTerm ,0 ),
1682- AllowedConsumers :make ([]string ,0 ),
1683- ConnectedUsers :make ([]string ,0 ),
1729+ OfferName :"hosted-mysql" ,
16841730},
16851731}
16861732