/*
    Licensed 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.
 */

#import "ObjectiveCMISTests+Environment.h"

NSString * const kCMISTestUsernameKey = @"ObjectiveCMISTestUsername";
NSString * const kCMISTestPasswordKey = @"ObjectiveCMISTestPassword";
NSString * const kCMISTestAtomPubUrlKey = @"ObjectiveCMISTestAtomPubUrl";
NSString * const kCMISTestRepoIdKey = @"ObjectiveCMISTestRepoId";

@implementation ObjectiveCMISTests (Environment)

- (NSString *)environmentStringForKey:(NSString *)envKey defaultValue:(NSString *)defaultValue
{
//    if (YES) return defaultValue;
    
    NSBundle *bundle = [NSBundle bundleForClass:[self class]];
    NSString *envValue = [bundle objectForInfoDictionaryKey:envKey];
    if ((nil == envValue) || ([envValue length] == 0))
    {
        return defaultValue;
    }
    
    if ([defaultValue hasSuffix:@"/service/api/cmis"]) 
    {
        //        envValue = @"http://127.0.0.1:8080/alfresco/cmisatom";
    }
    
    return envValue;
}


@end
