/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.apache.servicecomb.core.provider.consumer;

public class TestConsumerProviderManager {
//  @Before
//  public void setUp() throws Exception {
//    ArchaiusUtils.resetConfig();
//  }
//
//  @After
//  public void tearDown() throws Exception {
//    ArchaiusUtils.resetConfig();
//  }
//
//  @Test
//  public void allowedNoProvider(@Mocked ConsumerSchemaFactory consumerSchemaFactory) {
//    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
//    context.getBeanFactory().registerSingleton(consumerSchemaFactory.getClass().getName(), consumerSchemaFactory);
//    context.register(ConsumerProviderManager.class);
//    // must not throw exception
//    context.refresh();
//
//    context.close();
//  }
//
//  private ReferenceConfig mockCreateReferenceConfig() {
//    EventBus eventBus = new EventBus();
//    AppManager appManager = new AppManager(eventBus);
//
//    ConsumerProviderManager consumerProviderManager = new ConsumerProviderManager();
//    consumerProviderManager.setAppManager(appManager);
//
//    new Expectations(RegistryUtils.class) {
//      {
//        RegistryUtils.findServiceInstances(anyString, anyString, DefinitionConst.VERSION_RULE_ALL, null);
//        result = Collections.emptyList();
//      }
//    };
//
//    new MockUp<MicroserviceVersionRule>() {
//      @Mock
//      MicroserviceVersion getLatestMicroserviceVersion() {
//        return Mockito.mock(MicroserviceVersion.class);
//      }
//    };
//    return consumerProviderManager.createReferenceConfig("app:ms");
//  }
//
//  @Test
//  public void createReferenceConfig_default() {
//    ReferenceConfig referenceConfig = mockCreateReferenceConfig();
//
//    Assert.assertEquals("app", referenceConfig.getMicroserviceVersionRule().getAppId());
//    Assert.assertEquals("app:ms", referenceConfig.getMicroserviceVersionRule().getMicroserviceName());
//    Assert.assertEquals("0.0.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
//    Assert.assertEquals(Const.ANY_TRANSPORT, referenceConfig.getTransport());
//  }
//
//  @Test
//  public void createReferenceConfig_config() {
//    ArchaiusUtils.setProperty("servicecomb.references.app:ms.version-rule", "1.0.0+");
//    ArchaiusUtils.setProperty("servicecomb.references.app:ms.transport", Const.RESTFUL);
//
//    ReferenceConfig referenceConfig = mockCreateReferenceConfig();
//
//    Assert.assertEquals("app", referenceConfig.getMicroserviceVersionRule().getAppId());
//    Assert.assertEquals("app:ms", referenceConfig.getMicroserviceVersionRule().getMicroserviceName());
//    Assert.assertEquals("1.0.0.0+", referenceConfig.getMicroserviceVersionRule().getVersionRule().getVersionRule());
//    Assert.assertEquals(Const.RESTFUL, referenceConfig.getTransport());
//  }
//
//  @Test
//  public void createReferenceConfig_ProviderNotFound() {
//    EventBus eventBus = new EventBus();
//    AppManager appManager = new AppManager(eventBus);
//
//    ConsumerProviderManager consumerProviderManager = new ConsumerProviderManager();
//    consumerProviderManager.setAppManager(appManager);
//
//    new Expectations(RegistryUtils.class) {
//      {
//        RegistryUtils.findServiceInstances(anyString, anyString, DefinitionConst.VERSION_RULE_ALL, null);
//        result = Collections.emptyList();
//      }
//    };
//
//    new MockUp<MicroserviceVersionRule>() {
//      @Mock
//      String getAppId() {
//        return "aId";
//      }
//
//      @Mock
//      String getMicroserviceName() {
//        return "ms";
//      }
//    };
//
//    try {
//      consumerProviderManager.createReferenceConfig("app:ms");
//      fail("an IllegalStateException is expected!");
//    } catch (Exception e) {
//      Assert.assertEquals(IllegalStateException.class, e.getClass());
//      Assert.assertEquals(
//          "Probably invoke a service before it is registered, or no instance found for it, appId=aId, name=ms",
//          e.getMessage());
//      e.printStackTrace();
//    }
//  }
}
